From 1c440486f00f1f9ba49064e4ac8a23e2231c225d Mon Sep 17 00:00:00 2001 From: Jonathan Lange Date: Thu, 7 Jul 2016 14:30:08 +0100 Subject: [PATCH 1/2] Delete experimental, replace with 'extras' extras contains fixprobe and example, and ought to build properly --- .gitignore | 10 +- circle.yml | 2 +- experimental/_integration/cmd.go | 88 ---- experimental/_integration/contexts.go | 79 ---- experimental/_integration/doc.go | 2 - experimental/_integration/easy_test.go | 94 ---- experimental/_integration/no_test | 0 .../_integration/test_extra_report.json | 63 --- .../_integration/test_single_report.json | 71 --- experimental/demo/gce.sh | 158 ------- experimental/demoprobe/main.go | 117 ----- experimental/fixprobe/Makefile | 19 - experimental/ftrace/ftrace.go | 206 --------- experimental/ftrace/main.go | 127 ------ experimental/ftrace/proc.go | 94 ---- experimental/genreport/Makefile | 19 - experimental/genreport/generate.go | 92 ---- experimental/genreport/main.go | 16 - experimental/graphviz/handlers.go | 122 ----- experimental/graphviz/kubernetes.json | 1 - experimental/graphviz/main.go | 31 -- experimental/graphviz/render.go | 23 - experimental/kubernetes/install-scope.bash | 20 - experimental/multitenant/.gitignore | 4 - experimental/multitenant/Makefile | 11 - experimental/multitenant/frontend/Dockerfile | 12 - experimental/multitenant/frontend/api.json | 1 - .../multitenant/frontend/default.conf | 51 --- experimental/multitenant/run.sh | 58 --- experimental/pipeclient/.gitignore | 1 - experimental/pipeclient/main.go | 77 ---- experimental/shots/tns-example.json | 1 - experimental/sniff/sniffer.go | 332 -------------- experimental/sniff/sniffer_internal_test.go | 52 --- experimental/sniff/sniffer_test.go | 125 ----- experimental/sniff/source.go | 24 - experimental/sniff/testclient/main.go | 91 ---- experimental/tracer/.gitignore | 3 - experimental/tracer/Makefile | 31 -- experimental/tracer/README.md | 15 - experimental/tracer/main/Dockerfile | 6 - experimental/tracer/main/http.go | 150 ------ experimental/tracer/main/main.go | 70 --- experimental/tracer/main/store.go | 180 -------- experimental/tracer/ptrace/fd.go | 198 -------- experimental/tracer/ptrace/process.go | 99 ---- experimental/tracer/ptrace/ptracer.go | 337 -------------- experimental/tracer/ptrace/thread.go | 291 ------------ experimental/tracer/tracer | 49 -- experimental/tracer/ui/.gitignore | 4 - experimental/tracer/ui/README.md | 10 - experimental/tracer/ui/favicon.ico | Bin 741 -> 0 bytes experimental/tracer/ui/index.html | 393 ---------------- experimental/tracer/ui/logo.svg | 54 --- experimental/tracer/ui/package.json | 15 - experimental/tracer/ui/server.js | 25 - experimental/tracer/ui/sprintf.min.js | 4 - .../github.com/msackman/skiplist/LICENSE | 22 - .../github.com/msackman/skiplist/README.md | 2 - .../github.com/msackman/skiplist/skiplist.go | 429 ------------------ .../msackman/skiplist/skiplist_test.go | 315 ------------- experimental/tracer/vendor/manifest | 11 - {experimental => extras}/Makefile | 2 +- {experimental => extras}/README.md | 4 +- {experimental => extras}/build_on_circle.sh | 0 {experimental => extras}/example/.gitignore | 0 {experimental => extras}/example/Makefile | 2 +- {experimental => extras}/example/README.md | 0 .../example/app/Dockerfile | 0 {experimental => extras}/example/app/app.py | 0 .../example/app/requirements.txt | 0 .../example/client/Dockerfile | 0 .../example/client/client.py | 0 .../example/client/requirements.txt | 0 .../example/echo/Dockerfile | 0 {experimental => extras}/example/echo/echo.py | 0 .../example/echo/requirements.txt | 0 .../example/frontend-k8s/Dockerfile | 0 .../example/frontend-k8s/default.conf | 0 .../example/frontend/Dockerfile | 0 .../example/frontend/default.conf | 0 .../example/k8s/app-deployment.yaml | 0 .../example/k8s/app-svc.yaml | 0 .../example/k8s/client-deployment.yaml | 0 .../example/k8s/echo-deployment.yaml | 0 .../example/k8s/echo-svc.yaml | 0 .../example/k8s/elasticsearch-deployment.yaml | 0 .../example/k8s/elasticsearch-svc.yaml | 0 .../example/k8s/frontend-deployment.yaml | 0 .../example/k8s/frontend-svc.yaml | 0 .../example/k8s/qotd-deployment.yaml | 0 .../example/k8s/qotd-svc.yaml | 0 .../example/k8s/redis-deployment.yaml | 0 .../example/k8s/redis-svc.yaml | 0 .../example/k8s/search-deployment.yaml | 0 .../example/k8s/search-svc.yaml | 0 .../example/qotd/Dockerfile | 0 {experimental => extras}/example/qotd/qotd.c | 0 {experimental => extras}/example/run.sh | 0 .../example/run_tracer.sh | 0 .../example/searchapp/Dockerfile | 0 .../example/searchapp/app.go | 0 .../example/shout/Dockerfile | 0 .../example/shout/shout.go | 0 .../example/trace_app/Dockerfile | 0 .../example/trace_app/app.py | 0 .../example/trace_app/requirements.txt | 0 .../vendor/github.com/richo/GOSHOUT/README.MD | 0 .../vendor/github.com/richo/GOSHOUT/SHOUT.go | 0 .../example/vendor/manifest | 0 .../demoprobe => extras/fixprobe}/Makefile | 0 {experimental => extras}/fixprobe/main.go | 0 {experimental => extras}/in_parallel.sh | 0 113 files changed, 8 insertions(+), 5007 deletions(-) delete mode 100644 experimental/_integration/cmd.go delete mode 100644 experimental/_integration/contexts.go delete mode 100644 experimental/_integration/doc.go delete mode 100644 experimental/_integration/easy_test.go delete mode 100644 experimental/_integration/no_test delete mode 100644 experimental/_integration/test_extra_report.json delete mode 100644 experimental/_integration/test_single_report.json delete mode 100755 experimental/demo/gce.sh delete mode 100644 experimental/demoprobe/main.go delete mode 100644 experimental/fixprobe/Makefile delete mode 100644 experimental/ftrace/ftrace.go delete mode 100644 experimental/ftrace/main.go delete mode 100644 experimental/ftrace/proc.go delete mode 100644 experimental/genreport/Makefile delete mode 100644 experimental/genreport/generate.go delete mode 100644 experimental/genreport/main.go delete mode 100644 experimental/graphviz/handlers.go delete mode 100644 experimental/graphviz/kubernetes.json delete mode 100644 experimental/graphviz/main.go delete mode 100644 experimental/graphviz/render.go delete mode 100755 experimental/kubernetes/install-scope.bash delete mode 100644 experimental/multitenant/.gitignore delete mode 100644 experimental/multitenant/Makefile delete mode 100644 experimental/multitenant/frontend/Dockerfile delete mode 100644 experimental/multitenant/frontend/api.json delete mode 100644 experimental/multitenant/frontend/default.conf delete mode 100755 experimental/multitenant/run.sh delete mode 100644 experimental/pipeclient/.gitignore delete mode 100644 experimental/pipeclient/main.go delete mode 100644 experimental/shots/tns-example.json delete mode 100644 experimental/sniff/sniffer.go delete mode 100644 experimental/sniff/sniffer_internal_test.go delete mode 100644 experimental/sniff/sniffer_test.go delete mode 100644 experimental/sniff/source.go delete mode 100644 experimental/sniff/testclient/main.go delete mode 100644 experimental/tracer/.gitignore delete mode 100644 experimental/tracer/Makefile delete mode 100644 experimental/tracer/README.md delete mode 100644 experimental/tracer/main/Dockerfile delete mode 100644 experimental/tracer/main/http.go delete mode 100644 experimental/tracer/main/main.go delete mode 100644 experimental/tracer/main/store.go delete mode 100644 experimental/tracer/ptrace/fd.go delete mode 100644 experimental/tracer/ptrace/process.go delete mode 100644 experimental/tracer/ptrace/ptracer.go delete mode 100644 experimental/tracer/ptrace/thread.go delete mode 100755 experimental/tracer/tracer delete mode 100644 experimental/tracer/ui/.gitignore delete mode 100644 experimental/tracer/ui/README.md delete mode 100644 experimental/tracer/ui/favicon.ico delete mode 100644 experimental/tracer/ui/index.html delete mode 100644 experimental/tracer/ui/logo.svg delete mode 100644 experimental/tracer/ui/package.json delete mode 100644 experimental/tracer/ui/server.js delete mode 100644 experimental/tracer/ui/sprintf.min.js delete mode 100644 experimental/tracer/vendor/github.com/msackman/skiplist/LICENSE delete mode 100644 experimental/tracer/vendor/github.com/msackman/skiplist/README.md delete mode 100644 experimental/tracer/vendor/github.com/msackman/skiplist/skiplist.go delete mode 100644 experimental/tracer/vendor/github.com/msackman/skiplist/skiplist_test.go delete mode 100644 experimental/tracer/vendor/manifest rename {experimental => extras}/Makefile (90%) rename {experimental => extras}/README.md (78%) rename {experimental => extras}/build_on_circle.sh (100%) rename {experimental => extras}/example/.gitignore (100%) rename {experimental => extras}/example/Makefile (94%) rename {experimental => extras}/example/README.md (100%) rename {experimental => extras}/example/app/Dockerfile (100%) rename {experimental => extras}/example/app/app.py (100%) rename {experimental => extras}/example/app/requirements.txt (100%) rename {experimental => extras}/example/client/Dockerfile (100%) rename {experimental => extras}/example/client/client.py (100%) rename {experimental => extras}/example/client/requirements.txt (100%) rename {experimental => extras}/example/echo/Dockerfile (100%) rename {experimental => extras}/example/echo/echo.py (100%) rename {experimental => extras}/example/echo/requirements.txt (100%) rename {experimental => extras}/example/frontend-k8s/Dockerfile (100%) rename {experimental => extras}/example/frontend-k8s/default.conf (100%) rename {experimental => extras}/example/frontend/Dockerfile (100%) rename {experimental => extras}/example/frontend/default.conf (100%) rename {experimental => extras}/example/k8s/app-deployment.yaml (100%) rename {experimental => extras}/example/k8s/app-svc.yaml (100%) rename {experimental => extras}/example/k8s/client-deployment.yaml (100%) rename {experimental => extras}/example/k8s/echo-deployment.yaml (100%) rename {experimental => extras}/example/k8s/echo-svc.yaml (100%) rename {experimental => extras}/example/k8s/elasticsearch-deployment.yaml (100%) rename {experimental => extras}/example/k8s/elasticsearch-svc.yaml (100%) rename {experimental => extras}/example/k8s/frontend-deployment.yaml (100%) rename {experimental => extras}/example/k8s/frontend-svc.yaml (100%) rename {experimental => extras}/example/k8s/qotd-deployment.yaml (100%) rename {experimental => extras}/example/k8s/qotd-svc.yaml (100%) rename {experimental => extras}/example/k8s/redis-deployment.yaml (100%) rename {experimental => extras}/example/k8s/redis-svc.yaml (100%) rename {experimental => extras}/example/k8s/search-deployment.yaml (100%) rename {experimental => extras}/example/k8s/search-svc.yaml (100%) rename {experimental => extras}/example/qotd/Dockerfile (100%) rename {experimental => extras}/example/qotd/qotd.c (100%) rename {experimental => extras}/example/run.sh (100%) rename {experimental => extras}/example/run_tracer.sh (100%) rename {experimental => extras}/example/searchapp/Dockerfile (100%) rename {experimental => extras}/example/searchapp/app.go (100%) rename {experimental => extras}/example/shout/Dockerfile (100%) rename {experimental => extras}/example/shout/shout.go (100%) rename {experimental => extras}/example/trace_app/Dockerfile (100%) rename {experimental => extras}/example/trace_app/app.py (100%) rename {experimental => extras}/example/trace_app/requirements.txt (100%) rename {experimental => extras}/example/vendor/github.com/richo/GOSHOUT/README.MD (100%) rename {experimental => extras}/example/vendor/github.com/richo/GOSHOUT/SHOUT.go (100%) rename {experimental => extras}/example/vendor/manifest (100%) rename {experimental/demoprobe => extras/fixprobe}/Makefile (100%) rename {experimental => extras}/fixprobe/main.go (100%) rename {experimental => extras}/in_parallel.sh (100%) diff --git a/.gitignore b/.gitignore index b5d59005d..182d03f04 100644 --- a/.gitignore +++ b/.gitignore @@ -44,14 +44,8 @@ docker/scope docker/docker.tgz docker/weave docker/runsvinit -experimental/bridge/bridge -experimental/demoprobe/demoprobe -experimental/fixprobe/fixprobe -experimental/fixprobe/*.json -experimental/genreport/genreport -experimental/graphviz/graphviz -experimental/oneshot/oneshot -experimental/_integration/_integration +extras/fixprobe/fixprobe +extras/fixprobe/*.json *sublime-project *sublime-workspace *npm-debug.log diff --git a/circle.yml b/circle.yml index c298d4f39..d34a72c4f 100644 --- a/circle.yml +++ b/circle.yml @@ -42,7 +42,7 @@ test: parallel: true - cd $SRCDIR; rm -f prog/scope; make RM=: parallel: true - - cd $SRCDIR/experimental; ./build_on_circle.sh: + - cd $SRCDIR/extras; ./build_on_circle.sh: parallel: true - "test -z \"$SECRET_PASSWORD\" || (cd $SRCDIR/integration; ./gce.sh setup && eval $(./gce.sh hosts); ./setup.sh)": parallel: true diff --git a/experimental/_integration/cmd.go b/experimental/_integration/cmd.go deleted file mode 100644 index e3d780288..000000000 --- a/experimental/_integration/cmd.go +++ /dev/null @@ -1,88 +0,0 @@ -package integration - -import ( - "os" - "os/exec" - "path/filepath" - "strings" - "testing" - "time" -) - -var components = map[string]string{ - "app": "../../app/app", - "bridge": "../bridge/bridge", - "fixprobe": "../fixprobe/fixprobe", - "demoprobe": "../demoprobe/demoprobe", -} - -// cmdline is e.g. `experimental/fixprobe/fixprobe -publish.interval=10ms fixture.json` -func start(t *testing.T, cmdline string) *exec.Cmd { - toks := strings.Split(cmdline, " ") - if len(toks) <= 0 { - t.Fatalf("bad cmdline %q", cmdline) - } - - component, args := toks[0], toks[1:] - relpath, ok := components[component] - if !ok { - t.Fatalf("%s: unknown", component) - } - if _, err := os.Stat(relpath); err != nil { - t.Fatalf("%s: %s", component, err) - } - - cmd := &exec.Cmd{ - Dir: filepath.Dir(relpath), - Path: filepath.Base(relpath), - Args: append([]string{filepath.Base(relpath)}, args...), - Stdout: testWriter{t, component}, - Stderr: testWriter{t, component}, - } - - if err := cmd.Start(); err != nil { - t.Fatalf("%s: Start: %s", component, err) - } - - return cmd -} - -func stop(t *testing.T, c *exec.Cmd) { - done := make(chan struct{}) - - go func() { - defer close(done) - - if err := c.Process.Kill(); err != nil { - t.Fatalf("%s: Kill: %s", filepath.Base(c.Path), err) - } - - if _, err := c.Process.Wait(); err != nil { - t.Fatalf("%s: Wait: %s", filepath.Base(c.Path), err) - } - }() - - select { - case <-done: - case <-time.After(250 * time.Millisecond): - t.Fatalf("timeout when trying to stop %s", filepath.Base(c.Path)) - } -} - -type testWriter struct { - *testing.T - component string -} - -func (w testWriter) Write(p []byte) (int, error) { - w.T.Logf("<%10s> %s", w.component, p) - return len(p), nil -} - -func cwd() string { - cwd, err := os.Getwd() - if err != nil { - panic(err) - } - return cwd -} diff --git a/experimental/_integration/contexts.go b/experimental/_integration/contexts.go deleted file mode 100644 index 33529611b..000000000 --- a/experimental/_integration/contexts.go +++ /dev/null @@ -1,79 +0,0 @@ -package integration - -import ( - "fmt" - "io/ioutil" - "net/http" - "testing" - "time" -) - -type context int - -const ( - oneProbe context = iota - twoProbes -) - -var ( - appPort = 14030 - bridgePort = 14020 - probePort1 = 14010 - probePort2 = 14011 -) - -func withContext(t *testing.T, c context, tests ...func()) { - var ( - publish = 10 * time.Millisecond - batch = 10 * publish - wait = 2 * batch - ) - - switch c { - case oneProbe: - probe := start(t, fmt.Sprintf(`fixprobe -listen=:%d -publish.interval=%s %s/test_single_report.json`, probePort1, publish, cwd())) - defer stop(t, probe) - - time.Sleep(2 * publish) - app := start(t, fmt.Sprintf(`app -http.address=:%d -probes=localhost:%d -batch=%s`, appPort, probePort1, batch)) - defer stop(t, app) - - case twoProbes: - probe1 := start(t, fmt.Sprintf(`fixprobe -listen=:%d -publish.interval=%s %s/test_single_report.json`, probePort1, publish, cwd())) - defer stop(t, probe1) - - probe2 := start(t, fmt.Sprintf(`fixprobe -listen=:%d -publish.interval=%s %s/test_extra_report.json`, probePort2, publish, cwd())) - defer stop(t, probe2) - - time.Sleep(2 * publish) - app := start(t, fmt.Sprintf(`app -http.address=:%d -probes=localhost:%d,localhost:%d -batch=%s`, appPort, probePort1, probePort2, batch)) - defer stop(t, app) - - default: - t.Fatalf("bad context %v", c) - } - - time.Sleep(wait) - - for _, f := range tests { - f() - } -} - -func httpGet(t *testing.T, url string) []byte { - resp, err := http.Get(url) - if err != nil { - t.Fatalf("httpGet: %s", err) - } - defer resp.Body.Close() - if status := resp.StatusCode; status != 200 { - t.Fatalf("httpGet got status %d, expected 200", status) - } - - buf, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Fatalf("httpGet: %s", err) - } - - return buf -} diff --git a/experimental/_integration/doc.go b/experimental/_integration/doc.go deleted file mode 100644 index 5c99e5e3d..000000000 --- a/experimental/_integration/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package integration implements integration tests between components. -package integration diff --git a/experimental/_integration/easy_test.go b/experimental/_integration/easy_test.go deleted file mode 100644 index 9690847a7..000000000 --- a/experimental/_integration/easy_test.go +++ /dev/null @@ -1,94 +0,0 @@ -package integration_test - -import ( - "encoding/json" - "fmt" - "path/filepath" - "reflect" - "testing" - "time" - - "github.com/weaveworks/scope/report" -) - -func TestComponentsAreAvailable(t *testing.T) { - pause := time.Millisecond - for _, c := range []string{ - fmt.Sprintf(`app -http.address=:%d`, appPort), - fmt.Sprintf(`bridge -listen=:%d`, bridgePort), - fmt.Sprintf(`fixprobe -listen=:%d`, probePort1), - fmt.Sprintf(`demoprobe -listen=:%d`, probePort1), - } { - cmd := start(t, c) - time.Sleep(pause) - stop(t, cmd) - t.Logf("%s: OK", filepath.Base(cmd.Path)) - } -} - -func TestProcesses(t *testing.T) { - withContext(t, oneProbe, func() { - topo := parseTopology(t, httpGet(t, fmt.Sprintf("http://localhost:%d/api/topology/processes", appPort))) - assertAdjacent(t, topo["proc:node-1.2.3.4:apache"], "theinternet", "proc:node-192.168.1.1:wget") - want := map[string]interface{}{"max_conn_count_tcp": float64(19)} - have := parseEdge(t, httpGet(t, fmt.Sprintf("http://localhost:%d/api/topology/processes/%s/%s", appPort, "proc:node-192.168.1.1:wget", "theinternet"))) - if !reflect.DeepEqual(have, want) { - t.Errorf("have: %#v, want %#v", have, want) - } - }) -} - -func TestHosts(t *testing.T) { - withContext(t, oneProbe, func() { - topo := parseTopology(t, httpGet(t, fmt.Sprintf("http://localhost:%d/api/topology/hosts", appPort))) - assertAdjacent(t, topo["host:1_2_3_4"], "theinternet", "host:192_168_1_1") - - have := parseEdge(t, httpGet(t, fmt.Sprintf("http://localhost:%d/api/topology/hosts/%s/%s", appPort, "host:192_168_1_1", "theinternet"))) - want := map[string]interface{}{ - // "window": "15s", - "max_conn_count_tcp": float64(12), - } - if !reflect.DeepEqual(have, want) { - t.Errorf("have: %#v, want %#v", have, want) - } - }) -} - -func TestMultipleProbes(t *testing.T) { - withContext(t, twoProbes, func() { - topo := parseTopology(t, httpGet(t, fmt.Sprintf("http://localhost:%d/api/topology/processes", appPort))) - assertAdjacent(t, topo["proc:node-1.2.3.4:apache"], "theinternet", "proc:node-192.168.1.1:wget", "proc:node-192.168.1.1:curl") - }) -} - -func parseTopology(t *testing.T, p []byte) map[string]report.Node { - var r struct { - Nodes map[string]report.Node `json:"nodes"` - } - - if err := json.Unmarshal(p, &r); err != nil { - t.Fatalf("parseTopology: %s", err) - } - - return r.Nodes -} - -func parseEdge(t *testing.T, p []byte) map[string]interface{} { - var edge struct { - Metadata map[string]interface{} `json:"metadata"` - } - - if err := json.Unmarshal(p, &edge); err != nil { - t.Fatalf("Err: %v", err) - } - - return edge.Metadata -} - -func assertAdjacent(t *testing.T, n report.Node, ids ...string) { - want := report.MakeIDList(ids...) - - if have := n.Adjacency; !reflect.DeepEqual(want, have) { - t.Fatalf("want adjacency list %v, have %v", want, have) - } -} diff --git a/experimental/_integration/no_test b/experimental/_integration/no_test deleted file mode 100644 index e69de29bb..000000000 diff --git a/experimental/_integration/test_extra_report.json b/experimental/_integration/test_extra_report.json deleted file mode 100644 index c3e27cf22..000000000 --- a/experimental/_integration/test_extra_report.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "Process": { - "Adjacency": { - "hostX|;1.2.3.4;80": [ - ";192.168.1.1;10747", - "theinternet" - ], - "hostX|;192.168.1.1;10747": [ - "theinternet" - ] - }, - "EdgeMetadatas": {}, - "NodeMetadatas": { - ";1.2.3.4;80": { - "domain": "node-1.2.3.4", - "name": "apache", - "pid": "4000" - }, - ";192.168.1.1;10747": { - "domain": "node-192.168.1.1", - "name": "curl", - "pid": "4001" - } - } - }, - - "Network": { - "Adjacency": { - "hostX|;1.2.3.4": [ - ";192.168.1.1", - "theinternet" - ], - "hostX|;192.168.1.1": [ - "theinternet", - ";192.168.1.1" - ] - }, - "EdgeMetadatas": {}, - "NodeMetadatas": { - ";1.2.3.4": { - "name": "1.2.3.4" - }, - ";192.168.1.1": { - "name": "192.168.1.1" - } - } - }, - - "HostMetadatas": { - "hostX": { - "Timestamp": "2014-10-28T23:12:23.451728464Z", - "Hostname": "host-x", - "Addresses": null, - "LocalNets": [ - { - "IP": "192.168.0.0", - "Mask": "//8AAA==" - } - ], - "OS": "linux" - } - } -} diff --git a/experimental/_integration/test_single_report.json b/experimental/_integration/test_single_report.json deleted file mode 100644 index bb8b75c7e..000000000 --- a/experimental/_integration/test_single_report.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "Process": { - "Adjacency": { - "hostX|;1.2.3.4;80": [ - ";192.168.1.1;10746", - "theinternet" - ], - "hostX|;192.168.1.1;10746": [ - "theinternet" - ] - }, - "EdgeMetadatas": { - ";192.168.1.1;10746|theinternet": { - "WithConnCountTCP": true, - } - }, - "NodeMetadatas": { - ";1.2.3.4;80": { - "domain": "node-1.2.3.4", - "name": "apache", - "pid": "4000" - }, - ";192.168.1.1;10746": { - "domain": "node-192.168.1.1", - "name": "wget", - "pid": "4000" - } - } - }, - - "Network": { - "Adjacency": { - "hostX|;1.2.3.4": [ - ";192.168.1.1", - "theinternet" - ], - "hostX|;192.168.1.1": [ - "theinternet", - ";192.168.1.1" - ] - }, - "EdgeMetadatas": { - ";192.168.1.1|theinternet": { - "WithConnCountTCP": true, - } - }, - "NodeMetadatas": { - ";1.2.3.4": { - "name": "1_2_3_4" - }, - ";192.168.1.1": { - "name": "192_168_1_1" - } - } - }, - - "HostMetadatas": { - "hostX": { - "Timestamp": "2014-10-28T23:12:23.451728464Z", - "Hostname": "host-x", - "Addresses": null, - "LocalNets": [ - { - "IP": "192.168.0.0", - "Mask": "//8AAA==" - } - ], - "OS": "linux" - } - } -} diff --git a/experimental/demo/gce.sh b/experimental/demo/gce.sh deleted file mode 100755 index 51d7e7a7e..000000000 --- a/experimental/demo/gce.sh +++ /dev/null @@ -1,158 +0,0 @@ -#!/bin/bash -# This script has a bunch of GCE-related functions: -# ./gce.sh setup - starts two VMs on GCE and configures them to run our integration tests -# . ./gce.sh; ./run_all.sh - set a bunch of environment variables for the tests -# ./gce.sh destroy - tear down the VMs -# ./gce.sh make_template - make a fresh VM template; update TEMPLATE_NAME first! - -set -ex - -KEY_FILE=/tmp/gce_private_key.json -SSH_KEY_FILE=$HOME/.ssh/gce_ssh_key -PROJECT=${PROJECT:-positive-cocoa-90213} -IMAGE=ubuntu-14-04 -ZONE=us-central1-a -NUM_HOSTS=2 - -# Setup authentication -gcloud auth activate-service-account --key-file $KEY_FILE -gcloud config set project $PROJECT - -function vm_names { - local names= - for i in $(seq 1 $NUM_HOSTS); do - names="twilkie-test-$i $names" - done - echo "$names" -} - -# Delete all vms in this account -function destroy { - names="$(vm_names)" - for i in {0..10}; do - # gcloud instances delete can sometimes hang. - case $(set +e; timeout 60s /bin/bash -c "gcloud compute instances delete --zone $ZONE -q $names >/dev/null 2>&1 || true"; echo $?) in - 0) - return 0 - ;; - 124) - # 124 means it timed out - break - ;; - *) - return 1 - esac - done -} - -function external_ip { - gcloud compute instances list $1 --format=yaml | grep "^ natIP\:" | cut -d: -f2 | tr -d ' ' -} - -function internal_ip { - gcloud compute instances list $1 --format=yaml | grep "^ networkIP\:" | cut -d: -f2 | tr -d ' ' -} - -function try_connect { - for i in {0..10}; do - ssh -t $1 true && return - sleep 2 - done -} - -function install_on { - name=$1 - otherpeers=$2 - ssh -t $name sudo bash -x -s < /etc/apt/sources.list.d/docker.list; -apt-get update -qq; -apt-get install -q -y --force-yes --no-install-recommends lxc-docker ethtool emacs23-nox git make binutils mercurial libpcap-dev gcc; -usermod -a -G docker vagrant; -echo 'DOCKER_OPTS="-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375"' >> /etc/default/docker; -service docker restart; -wget -q https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz; -tar -C /usr/local -xzf go1.4.2.linux-amd64.tar.gz; -/usr/local/go/bin/go clean -i net -/usr/local/go/bin/go install -tags netgo std -EOF - - ssh -t $name bash -x -s <>~/.profile -echo "export GOPATH=$HOME" >>~/.profile -. ~/.profile -EOF - - ssh -t $name bash -x -s <>/etc/hosts" - try_connect $hostname - - # Add the local ips to the remote /etc/hosts - otherpeers="" - for othername in $names; do - otherip="$(internal_ip $othername)" - otherpeers="$otherip $otherpeers" - entry="$otherip $othername.$ZONE.$PROJECT" - ssh -t "$hostname" "sudo -- sh -c \"echo \\\"$entry\\\" >>/etc/hosts\"" - done - - install_on $hostname "$otherpeers" - done - - for name in $names; do - hostname="$name.$ZONE.$PROJECT" - ssh -t $hostname bash -x -s < 200 { - ip[2]++ - ip[3] = 1 - } - } - hosts = append(hosts, []string{"1.2.3.4", "2.3.4.5"}...) // Some non-local ones, too. - - _, localNet, err := net.ParseCIDR("192.168.0.0/16") - if err != nil { - panic(err) - } - - type conn struct { - srcProc, dstProc string - dstPort int - } - procPool := []conn{ - {srcProc: "curl", dstPort: 80, dstProc: "apache"}, - {srcProc: "wget", dstPort: 80, dstProc: "apache"}, - {srcProc: "curl", dstPort: 80, dstProc: "nginx"}, - {srcProc: "curl", dstPort: 8080, dstProc: "app1"}, - {srcProc: "nginx", dstPort: 8080, dstProc: "app1"}, - {srcProc: "nginx", dstPort: 8080, dstProc: "app2"}, - {srcProc: "nginx", dstPort: 8080, dstProc: "app3"}, - } - connectionCount := nodeCount * 2 - for i := 0; i < connectionCount; i++ { - var ( - c = procPool[rand.Intn(len(procPool))] - src = hosts[rand.Intn(len(hosts))] - dst = hosts[rand.Intn(len(hosts))] - srcPort = rand.Intn(50000) + 10000 - srcPortID = report.MakeEndpointNodeID("", src, strconv.Itoa(srcPort)) - dstPortID = report.MakeEndpointNodeID("", dst, strconv.Itoa(c.dstPort)) - ) - - // Endpoint topology - r.Endpoint = r.Endpoint.AddNode(report.MakeNodeWith(srcPortID, map[string]string{ - process.PID: "4000", - "name": c.srcProc, - "domain": "node-" + src, - }). - WithEdge(dstPortID, report.EdgeMetadata{})) - - r.Endpoint = r.Endpoint.AddNode(report.MakeNodeWith(dstPortID, map[string]string{ - process.PID: "4000", - "name": c.dstProc, - "domain": "node-" + dst, - }). - WithEdge(srcPortID, report.EdgeMetadata{})) - - // Host data - r.Host = r.Host.AddNode(report.MakeNodeWith("hostX", map[string]string{ - "ts": time.Now().UTC().Format(time.RFC3339Nano), - "host_name": "host-x", - "local_networks": localNet.String(), - "os": "linux", - })) - - } - - return r -} - -func newu64(value uint64) *uint64 { return &value } diff --git a/experimental/fixprobe/Makefile b/experimental/fixprobe/Makefile deleted file mode 100644 index 70334ba49..000000000 --- a/experimental/fixprobe/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -.PHONY: all vet lint build test clean - -all: build test vet lint - -vet: - go vet ./... - -lint: - golint . - -build: - go build - -test: - go test - -clean: - go clean - diff --git a/experimental/ftrace/ftrace.go b/experimental/ftrace/ftrace.go deleted file mode 100644 index 4335ab715..000000000 --- a/experimental/ftrace/ftrace.go +++ /dev/null @@ -1,206 +0,0 @@ -package main - -import ( - "bufio" - "bytes" - "fmt" - "io/ioutil" - "os" - "path" - "regexp" - "strconv" - "strings" -) - -const ( - perms = 0777 -) - -var ( - lineMatcher = regexp.MustCompile(`^\s*[a-z\-]+\-(\d+)\s+\[(\d{3})] (?:\.|1){4} ([\d\.]+): (.*)$`) - enterMatcher = regexp.MustCompile(`^([\w_]+)\((.*)\)$`) - argMatcher = regexp.MustCompile(`(\w+): (\w+)`) - exitMatcher = regexp.MustCompile(`^([\w_]+) -> (\w+)$`) -) - -// Ftrace is a tracer using ftrace... -type Ftrace struct { - ftraceRoot string - root string - outstanding map[int]*syscall // map from pid (readlly tid) to outstanding syscall -} - -type syscall struct { - pid int - cpu int - ts float64 - name string - args map[string]string - returnCode int64 -} - -func findDebugFS() (string, error) { - contents, err := ioutil.ReadFile("/proc/mounts") - if err != nil { - return "", err - } - scanner := bufio.NewScanner(bytes.NewBuffer(contents)) - for scanner.Scan() { - fields := strings.Fields(scanner.Text()) - if len(fields) < 3 { - continue - } - if fields[2] == "debugfs" { - return fields[1], nil - } - } - if err := scanner.Err(); err != nil { - return "", err - } - return "", fmt.Errorf("Not found") -} - -// NewFtracer constucts a new Ftrace instance. -func NewFtracer() (*Ftrace, error) { - root, err := findDebugFS() - if err != nil { - return nil, err - } - scopeRoot := path.Join(root, "tracing", "instances", "scope") - if err := os.Mkdir(scopeRoot, perms); err != nil && os.IsExist(err) { - if err := os.Remove(scopeRoot); err != nil { - return nil, err - } - if err := os.Mkdir(scopeRoot, perms); err != nil { - return nil, err - } - } else if err != nil { - return nil, err - } - return &Ftrace{ - ftraceRoot: root, - root: scopeRoot, - outstanding: map[int]*syscall{}, - }, nil -} - -func (f *Ftrace) destroy() error { - return os.Remove(f.root) -} - -func (f *Ftrace) enableTracing() error { - // need to enable tracing at root to get trace_pipe to block in my instance. Weird - if err := ioutil.WriteFile(path.Join(f.ftraceRoot, "tracing", "tracing_on"), []byte("1"), perms); err != nil { - return err - } - return ioutil.WriteFile(path.Join(f.root, "tracing_on"), []byte("1"), perms) -} - -func (f *Ftrace) disableTracing() error { - if err := ioutil.WriteFile(path.Join(f.root, "tracing_on"), []byte("0"), perms); err != nil { - return err - } - - return ioutil.WriteFile(path.Join(f.ftraceRoot, "tracing", "tracing_on"), []byte("1"), perms) -} - -func (f *Ftrace) enableEvent(class, event string) error { - return ioutil.WriteFile(path.Join(f.root, "events", class, event, "enable"), []byte("1"), perms) -} - -func mustAtoi(a string) int { - i, err := strconv.Atoi(a) - if err != nil { - panic(err) - } - return i -} - -func mustAtof(a string) float64 { - i, err := strconv.ParseFloat(a, 64) - if err != nil { - panic(err) - } - return i -} - -func (f *Ftrace) events(out chan<- *syscall) { - file, err := os.Open(path.Join(f.root, "trace_pipe")) - if err != nil { - panic(err) - } - defer file.Close() - - scanner := bufio.NewScanner(file) - for scanner.Scan() { - matches := lineMatcher.FindStringSubmatch(scanner.Text()) - if matches == nil { - continue - } - pid := mustAtoi(matches[1]) - log := matches[4] - - if enterMatches := enterMatcher.FindStringSubmatch(log); enterMatches != nil { - name := enterMatches[1] - args := map[string]string{} - for _, arg := range argMatcher.FindAllStringSubmatch(enterMatches[2], -1) { - args[arg[1]] = arg[2] - } - - s := &syscall{ - pid: pid, - cpu: mustAtoi(matches[2]), - ts: mustAtof(matches[3]), - name: strings.TrimPrefix(name, "sys_"), - args: args, - } - - f.outstanding[pid] = s - - } else if exitMatches := exitMatcher.FindStringSubmatch(log); exitMatches != nil { - s, ok := f.outstanding[pid] - if !ok { - continue - } - delete(f.outstanding, pid) - returnCode, err := strconv.ParseUint(exitMatches[2], 0, 64) - if err != nil { - panic(err) - } - s.returnCode = int64(returnCode) - out <- s - } else { - fmt.Printf("Unmatched: %s", log) - } - } - - if err := scanner.Err(); err != nil { - panic(err) - } -} - -func (f *Ftrace) start() error { - for _, e := range []struct{ class, event string }{ - {"syscalls", "sys_enter_socket"}, - {"syscalls", "sys_exit_socket"}, - {"syscalls", "sys_enter_connect"}, - {"syscalls", "sys_exit_connect"}, - {"syscalls", "sys_enter_accept"}, - {"syscalls", "sys_exit_accept"}, - {"syscalls", "sys_enter_accept4"}, - {"syscalls", "sys_exit_accept4"}, - {"syscalls", "sys_enter_close"}, - {"syscalls", "sys_exit_close"}, - } { - if err := f.enableEvent(e.class, e.event); err != nil { - return err - } - } - - return f.enableTracing() -} - -func (f *Ftrace) stop() error { - defer f.destroy() - return f.disableTracing() -} diff --git a/experimental/ftrace/main.go b/experimental/ftrace/main.go deleted file mode 100644 index 16058cf37..000000000 --- a/experimental/ftrace/main.go +++ /dev/null @@ -1,127 +0,0 @@ -package main - -import ( - "fmt" - "strconv" - "time" - - "github.com/bluele/gcache" -) - -const cacheSize = 500 - -// On every connect and accept, we lookup the local addr -// As this is expensive, we cache the result -var fdAddrCache = gcache.New(cacheSize).LRU().Expiration(15 * time.Second).Build() - -type fdCacheKey struct { - pid int - fd int -} -type fdCacheValue struct { - addr uint32 - port uint16 -} - -func getCachedLocalAddr(pid, fd int) (uint32, uint16, error) { - key := fdCacheKey{pid, fd} - val, err := fdAddrCache.Get(key) - if val != nil { - return val.(fdCacheValue).addr, val.(fdCacheValue).port, nil - } - - addr, port, err := getLocalAddr(pid, fd) - if err != nil { - return 0, 0, err - } - fdAddrCache.Set(key, fdCacheValue{addr, port}) - return addr, port, nil -} - -// On every connect or accept, we cache the syscall that caused -// it for matching with a connection from conntrack -var syscallCache = gcache.New(cacheSize).LRU().Expiration(15 * time.Second).Build() - -type syscallCacheKey struct { - localAddr uint32 - localPort uint16 -} -type syscallCacheValue *syscall - -// One ever conntrack connection, we cache it by local addr, port to match with -// a future syscall -var conntrackCache = gcache.New(cacheSize).LRU().Expiration(15 * time.Second).Build() - -type conntrackCacheKey syscallCacheKey - -// And keep a list of successfully matched connection, for us to close out -// when we get the close syscall - -func main() { - ftrace, err := NewFtracer() - if err != nil { - panic(err) - } - - ftrace.start() - defer ftrace.stop() - - syscalls := make(chan *syscall, 100) - go ftrace.events(syscalls) - - onSocket := func(s *syscall) { - - } - - onConnection := func(s *syscall) { - if s.returnCode != 0 { - return - } - - fdStr, ok := s.args["fd"] - if !ok { - panic("no pid") - } - fd64, err := strconv.ParseInt(fdStr, 32, 16) - if err != nil { - panic(err) - } - fd := int(fd64) - - addr, port, err := getCachedLocalAddr(s.pid, fd) - if err != nil { - fmt.Printf("Failed to get local addr for pid=%d fd=%d: %v\n", s.pid, fd, err) - return - } - - fmt.Printf("%+v %d %d\n", s, addr, port) - syscallCache.Set(syscallCacheKey{addr, port}, s) - } - - onAccept := func(s *syscall) { - - } - - onClose := func(s *syscall) { - - } - - fmt.Println("Started") - - for { - select { - case s := <-syscalls: - - switch s.name { - case "socket": - onSocket(s) - case "connect": - onConnection(s) - case "accept", "accept4": - onAccept(s) - case "close": - onClose(s) - } - } - } -} diff --git a/experimental/ftrace/proc.go b/experimental/ftrace/proc.go deleted file mode 100644 index 15320cdf9..000000000 --- a/experimental/ftrace/proc.go +++ /dev/null @@ -1,94 +0,0 @@ -package main - -import ( - "bufio" - "fmt" - "os" - "regexp" - "strconv" -) - -const ( - socketPattern = `^socket:\[(\d+)\]$` - tcpPattern = `^\s*(?P\d+): (?P[A-F0-9]{8}):(?P[A-F0-9]{4}) ` + - `(?P[A-F0-9]{8}):(?P[A-F0-9]{4}) (?:[A-F0-9]{2}) (?:[A-F0-9]{8}):(?:[A-F0-9]{8}) ` + - `(?:[A-F0-9]{2}):(?:[A-F0-9]{8}) (?:[A-F0-9]{8}) \s+(?:\d+) \s+(?:\d+) (?P\d+)` -) - -var ( - socketRegex = regexp.MustCompile(socketPattern) - tcpRegexp = regexp.MustCompile(tcpPattern) -) - -func getLocalAddr(pid, fd int) (addr uint32, port uint16, err error) { - var ( - socket string - match []string - inode int - tcpFile *os.File - scanner *bufio.Scanner - candidate int - port64 int64 - addr64 int64 - ) - - socket, err = os.Readlink(fmt.Sprintf("/proc/%d/fd/%d", pid, fd)) - if err != nil { - return - } - - match = socketRegex.FindStringSubmatch(socket) - if match == nil { - err = fmt.Errorf("Fd %d not a socket", fd) - return - } - - inode, err = strconv.Atoi(match[1]) - if err != nil { - return - } - - tcpFile, err = os.Open(fmt.Sprintf("/proc/%d/net/tcp", pid)) - if err != nil { - return - } - defer tcpFile.Close() - - scanner = bufio.NewScanner(tcpFile) - for scanner.Scan() { - match = tcpRegexp.FindStringSubmatch(scanner.Text()) - if match == nil { - continue - } - - candidate, err = strconv.Atoi(match[6]) - if err != nil { - return - } - if candidate != inode { - continue - } - - addr64, err = strconv.ParseInt(match[2], 16, 32) - if err != nil { - return - } - addr = uint32(addr64) - - // use a 32 bit int for target, at the result is a uint16 - port64, err = strconv.ParseInt(match[3], 16, 32) - if err != nil { - return - } - port = uint16(port64) - - return - } - - if err = scanner.Err(); err != nil { - return - } - - err = fmt.Errorf("Fd %d not found for proc %d", fd, pid) - return -} diff --git a/experimental/genreport/Makefile b/experimental/genreport/Makefile deleted file mode 100644 index 70334ba49..000000000 --- a/experimental/genreport/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -.PHONY: all vet lint build test clean - -all: build test vet lint - -vet: - go vet ./... - -lint: - golint . - -build: - go build - -test: - go test - -clean: - go clean - diff --git a/experimental/genreport/generate.go b/experimental/genreport/generate.go deleted file mode 100644 index dc48c1d19..000000000 --- a/experimental/genreport/generate.go +++ /dev/null @@ -1,92 +0,0 @@ -package main - -import ( - "fmt" - "math/rand" - "net" - "strconv" - "time" - - "github.com/weaveworks/scope/report" -) - -func init() { - rand.Seed(time.Now().UnixNano()) -} - -// DemoReport makes up a report. -func DemoReport(nodeCount int) report.Report { - r := report.MakeReport() - - // Make up some plausible IPv4 numbers - hosts := []string{} - ip := [4]int{192, 168, 1, 1} - for range make([]struct{}, nodeCount) { - hosts = append(hosts, fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])) - ip[3]++ - if ip[3] > 200 { - ip[2]++ - ip[3] = 1 - } - } - // Some non-local ones. - hosts = append(hosts, []string{"1.2.3.4", "2.3.4.5"}...) - - _, localNet, err := net.ParseCIDR("192.168.0.0/16") - if err != nil { - panic(err) - } - - type conn struct { - srcProc, dstProc string - dstPort int - } - procPool := []conn{ - {srcProc: "curl", dstPort: 80, dstProc: "apache"}, - {srcProc: "wget", dstPort: 80, dstProc: "apache"}, - {srcProc: "curl", dstPort: 80, dstProc: "nginx"}, - {srcProc: "curl", dstPort: 8080, dstProc: "app1"}, - {srcProc: "nginx", dstPort: 8080, dstProc: "app1"}, - {srcProc: "nginx", dstPort: 8080, dstProc: "app2"}, - {srcProc: "nginx", dstPort: 8080, dstProc: "app3"}, - } - connectionCount := nodeCount * 8 - for i := 0; i < connectionCount; i++ { - var ( - c = procPool[rand.Intn(len(procPool))] - src = hosts[rand.Intn(len(hosts))] - dst = hosts[rand.Intn(len(hosts))] - srcPort = rand.Intn(50000) + 10000 - srcPortID = report.MakeEndpointNodeID("", src, strconv.Itoa(srcPort)) - dstPortID = report.MakeEndpointNodeID("", dst, strconv.Itoa(c.dstPort)) - ) - - // Endpoint topology - r.Endpoint = r.Endpoint.AddNode(report.MakeNodeWith(srcPortID, map[string]string{ - "pid": "4000", - "name": c.srcProc, - "domain": "node-" + src, - }). - WithEdge(dstPortID, report.EdgeMetadata{})) - - r.Endpoint = r.Endpoint.AddNode(report.MakeNodeWith(dstPortID, map[string]string{ - "pid": "4000", - "name": c.dstProc, - "domain": "node-" + dst, - }). - WithEdge(srcPortID, report.EdgeMetadata{})) - - // Host data - r.Host = r.Host.AddNode(report.MakeNodeWith("hostX", map[string]string{ - "ts": time.Now().UTC().Format(time.RFC3339Nano), - "host_name": "host-x", - "local_networks": localNet.String(), - "os": "linux", - })) - - } - - return r -} - -func newu64(value uint64) *uint64 { return &value } diff --git a/experimental/genreport/main.go b/experimental/genreport/main.go deleted file mode 100644 index 51875f6cc..000000000 --- a/experimental/genreport/main.go +++ /dev/null @@ -1,16 +0,0 @@ -package main - -import ( - "encoding/json" - "flag" - "log" - "os" -) - -func main() { - nodes := flag.Int("nodes", 10, "node count") - flag.Parse() - if err := json.NewEncoder(os.Stdout).Encode(DemoReport(*nodes)); err != nil { - log.Print(err) - } -} diff --git a/experimental/graphviz/handlers.go b/experimental/graphviz/handlers.go deleted file mode 100644 index 307c55c03..000000000 --- a/experimental/graphviz/handlers.go +++ /dev/null @@ -1,122 +0,0 @@ -package main - -import ( - "bytes" - "fmt" - "io" - "log" - "net/http" - "net/url" - "os" - "os/exec" - - "github.com/weaveworks/scope/render/detailed" - "github.com/weaveworks/scope/report" -) - -func dot(w io.Writer, t detailed.NodeSummaries) { - fmt.Fprintf(w, "digraph G {\n") - fmt.Fprintf(w, "\toutputorder=edgesfirst;\n") - fmt.Fprintf(w, "\toverlap=scale;\n") - fmt.Fprintf(w, "\tnode [style=filled];\n") - fmt.Fprintf(w, "\t\n") - for id, rn := range t { - label := rn.Label - if len(label) > 20 { - label = label[:20] + "..." - } - fmt.Fprintf(w, "\t%q [label=%q];\n", id, label) - for _, other := range rn.Adjacency { - fmt.Fprintf(w, "\t%q -> %q;\n", id, other) - } - fmt.Fprintf(w, "\t\n") - } - fmt.Fprintf(w, "}\n") -} - -func handleHTML(rpt report.Report) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - logRequest("HTML", r) - format := `
` - fmt.Fprintf(w, format, r.URL.RawQuery) - } -} - -func handleDot(rpt report.Report) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - logRequest("Dot", r) - - r.ParseForm() - var ( - engine = getDefault(r.Form, "engine", "twopi") - topology = getDefault(r.Form, "topology", "containers") - ) - log.Printf("engine=%s topology=%s", engine, topology) - - t, err := renderTo(rpt, topology) - if err != nil { - log.Print(err) - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - log.Printf("render %s to %d node(s)", topology, len(t)) - - w.Header().Set("Content-Type", "text/plain; charset=utf-8") - dot(w, t) - } -} - -func handleSVG(rpt report.Report) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - logRequest("SVG", r) - - r.ParseForm() - var ( - engine = getDefault(r.Form, "engine", "twopi") - topology = getDefault(r.Form, "topology", "containers") - ) - log.Printf("engine=%s topology=%s", engine, topology) - - t, err := renderTo(rpt, topology) - if err != nil { - log.Print(err) - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - log.Printf("render %s to %d node(s)", topology, len(t)) - - vizcmd, err := exec.LookPath(engine) - if err != nil { - log.Print(err) - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - var buf bytes.Buffer - dot(&buf, t) - - w.Header().Set("Content-Type", "image/svg+xml") - if err := (&exec.Cmd{ - Path: vizcmd, - Args: []string{vizcmd, "-Tsvg"}, - Stdin: &buf, - Stdout: w, - Stderr: os.Stderr, - }).Run(); err != nil { - log.Print(err) - http.Error(w, err.Error(), http.StatusInternalServerError) - return - } - } -} - -func logRequest(what string, r *http.Request) { - log.Printf("> %s %s %s %s", what, r.RemoteAddr, r.Method, r.URL.String()) -} - -func getDefault(v url.Values, key, def string) string { - if val := v.Get(key); val != "" { - return val - } - return def -} diff --git a/experimental/graphviz/kubernetes.json b/experimental/graphviz/kubernetes.json deleted file mode 100644 index 3421d5dfc..000000000 --- a/experimental/graphviz/kubernetes.json +++ /dev/null @@ -1 +0,0 @@ -{"Endpoint":{"Nodes":{";10.0.0.1;443":{"metadata":{"addr":"10.0.0.1","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.1;58064","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3580","port":"443","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;10.244.1.4;42094","kubernetes-minion-ynva;10.244.1.4;42096","kubernetes-minion-ynva;10.244.1.4;42098"],"edges":{"kubernetes-minion-ynva;10.244.1.4;42094":{"max_conn_count_tcp":1},"kubernetes-minion-ynva;10.244.1.4;42096":{"max_conn_count_tcp":1},"kubernetes-minion-ynva;10.244.1.4;42098":{"max_conn_count_tcp":1}}},";10.0.118.122;6379":{"metadata":{"addr":"10.0.118.122","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.1;42113","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3580","port":"6379","procspied":"true","topology":"endpoint"},"adjacency":[]},";10.240.105.97;32911":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"2351","port":"32911","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.105.97;32945":{"metadata":{"addr":"10.240.105.97","conntracked":"true","port":"32945","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.105.97;32948":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"14085","port":"32948","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.105.97;40915":{"metadata":{"addr":"10.240.105.97","conntracked":"true","copy_of":"kubernetes-minion-y1qq;10.244.0.2;40915","port":"40915","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.105.97;40919":{"metadata":{"addr":"10.240.105.97","conntracked":"true","copy_of":"kubernetes-minion-y1qq;10.244.0.2;40919","port":"40919","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.105.97;40921":{"metadata":{"addr":"10.240.105.97","conntracked":"true","copy_of":"kubernetes-minion-y1qq;10.244.0.2;40921","port":"40921","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.105.97;40923":{"metadata":{"addr":"10.240.105.97","conntracked":"true","copy_of":"kubernetes-minion-y1qq;10.244.0.2;40923","port":"40923","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.105.97;41656":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq.c.kubernetes-for-paul.internal","pid":"3626","port":"41656","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.105.97;41657":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq.c.kubernetes-for-paul.internal","pid":"3626","port":"41657","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.105.97;41658":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq.c.kubernetes-for-paul.internal","pid":"3626","port":"41658","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.105.97;41659":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq.c.kubernetes-for-paul.internal","pid":"3626","port":"41659","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.105.97;41692":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq.c.kubernetes-for-paul.internal","pid":"3626","port":"41692","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.105.97;42516":{"metadata":{"addr":"10.240.105.97","conntracked":"true","port":"42516","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.105.97;42517":{"metadata":{"addr":"10.240.105.97","conntracked":"true","port":"42517","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.105.97;42580":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq.c.kubernetes-for-paul.internal","pid":"3620","port":"42580","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.105.97;42581":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq.c.kubernetes-for-paul.internal","pid":"3620","port":"42581","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.105.97;43855":{"metadata":{"addr":"10.240.105.97","conntracked":"true","copy_of":"kubernetes-minion-y1qq;10.244.0.2;43855","port":"43855","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.105.97;43859":{"metadata":{"addr":"10.240.105.97","conntracked":"true","copy_of":"kubernetes-minion-y1qq;10.244.0.2;43859","port":"43859","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.105.97;43861":{"metadata":{"addr":"10.240.105.97","conntracked":"true","copy_of":"kubernetes-minion-y1qq;10.244.0.2;43861","port":"43861","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.105.97;43863":{"metadata":{"addr":"10.240.105.97","conntracked":"true","copy_of":"kubernetes-minion-y1qq;10.244.0.2;43863","port":"43863","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.105.97;49603":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq.c.kubernetes-for-paul.internal","pid":"7937","port":"49603","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;4040"],"edges":{";10.240.39.22;4040":{"max_conn_count_tcp":1}}},";10.240.105.97;60192":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"2361","port":"60192","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.105.97;60263":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3626","port":"60263","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.39.22;32990":{"metadata":{"addr":"10.240.39.22","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"10317","port":"32990","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.39.22;33045":{"metadata":{"addr":"10.240.39.22","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2361","port":"33045","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.39.22;33078":{"metadata":{"addr":"10.240.39.22","conntracked":"true","port":"33078","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.39.22;33079":{"metadata":{"addr":"10.240.39.22","conntracked":"true","port":"33079","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.39.22;33080":{"metadata":{"addr":"10.240.39.22","conntracked":"true","port":"33080","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.39.22;33081":{"metadata":{"addr":"10.240.39.22","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11209","port":"33081","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.39.22;38411":{"metadata":{"addr":"10.240.39.22","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4776","port":"38411","procspied":"true","topology":"endpoint"},"adjacency":[";173.194.67.95;443"],"edges":{";173.194.67.95;443":{"max_conn_count_tcp":1}}},";10.240.39.22;4040":{"metadata":{"addr":"10.240.39.22","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"kubernetes-master.c.kubernetes-for-paul.internal","pid":"7515","port":"4040","procspied":"true","topology":"endpoint"},"adjacency":[";37.157.33.76;3046"],"edges":{";37.157.33.76;3046":{"max_conn_count_tcp":1}}},";10.240.39.22;443":{"metadata":{"addr":"10.240.39.22","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"kubernetes-master.c.kubernetes-for-paul.internal","pid":"4157","port":"443","procspied":"true","topology":"endpoint"},"adjacency":[]},";10.240.39.22;59549":{"metadata":{"addr":"10.240.39.22","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2373","port":"59549","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.39.22;59624":{"metadata":{"addr":"10.240.39.22","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"3819","port":"59624","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;34292":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;34292","port":"34292","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.72.84;34295":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;34295","port":"34295","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.72.84;34299":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;34299","port":"34299","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.72.84;34301":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;34301","port":"34301","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.72.84;34303":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;34303","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5645","port":"34303","procspied":"true","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.72.84;34305":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;34305","port":"34305","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.72.84;34308":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;34308","port":"34308","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},";10.240.72.84;40649":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"2380","port":"40649","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;40720":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3579","port":"40720","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;41056":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3579","port":"41056","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41058":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3579","port":"41058","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41059":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3579","port":"41059","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41060":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3579","port":"41060","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41061":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3579","port":"41061","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41181":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3580","port":"41181","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41183":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3580","port":"41183","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41185":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3580","port":"41185","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41546":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"12844","port":"41546","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;41583":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"2371","port":"41583","procspied":"true","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;41822":{"metadata":{"addr":"10.240.72.84","conntracked":"true","port":"41822","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41861":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3580","port":"41861","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41862":{"metadata":{"addr":"10.240.72.84","conntracked":"true","port":"41862","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;41863":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3580","port":"41863","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";10.240.72.84;46597":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"3580","port":"46597","procspied":"true","topology":"endpoint"},"adjacency":[";10.244.0.6;6379","kubernetes-minion-y1qq;10.244.0.6;6379"],"edges":{";10.244.0.6;6379":{"max_conn_count_tcp":1},"kubernetes-minion-y1qq;10.244.0.6;6379":{"max_conn_count_tcp":1}}},";10.240.72.84;47978":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva.c.kubernetes-for-paul.internal","pid":"8829","port":"47978","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;4040"],"edges":{";10.240.39.22;4040":{"max_conn_count_tcp":1}}},";10.240.72.84;51794":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;51794","port":"51794","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;51797":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;51797","port":"51797","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;51801":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;51801","port":"51801","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;51803":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;51803","port":"51803","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;51805":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;51805","port":"51805","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;51807":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;51807","port":"51807","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.240.72.84;51810":{"metadata":{"addr":"10.240.72.84","conntracked":"true","copy_of":"kubernetes-minion-ynva;10.244.1.3;51810","port":"51810","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},";10.244.0.6;6379":{"metadata":{"addr":"10.244.0.6","conntracked":"true","port":"6379","procspied":"true","topology":"endpoint"},"adjacency":[]},";169.254.169.254;80":{"metadata":{"addr":"169.254.169.254","conntracked":"true","name":"metadata.google.internal","port":"80","procspied":"true","topology":"endpoint"},"adjacency":[]},";173.194.67.95;443":{"metadata":{"addr":"173.194.67.95","conntracked":"true","name":"wi-in-f95.1e100.net","port":"443","procspied":"true","topology":"endpoint"},"adjacency":[]},";37.157.33.76;12324":{"metadata":{"addr":"37.157.33.76","conntracked":"true","port":"12324","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;4040"],"edges":{";10.240.39.22;4040":{"max_conn_count_tcp":1}}},";37.157.33.76;12511":{"metadata":{"addr":"37.157.33.76","conntracked":"true","port":"12511","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;4040"],"edges":{";10.240.39.22;4040":{"max_conn_count_tcp":1}}},";37.157.33.76;29919":{"metadata":{"addr":"37.157.33.76","conntracked":"true","port":"29919","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;443"],"edges":{";10.240.39.22;443":{"max_conn_count_tcp":1}}},";37.157.33.76;3046":{"metadata":{"addr":"37.157.33.76","conntracked":"true","port":"3046","procspied":"true","topology":"endpoint"},"adjacency":[]},";37.157.33.76;34731":{"metadata":{"addr":"37.157.33.76","conntracked":"true","port":"34731","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;4040"],"edges":{";10.240.39.22;4040":{"max_conn_count_tcp":1}}},";37.157.33.76;56496":{"metadata":{"addr":"37.157.33.76","conntracked":"true","port":"56496","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;4040"],"edges":{";10.240.39.22;4040":{"max_conn_count_tcp":1}}},";37.157.33.76;7160":{"metadata":{"addr":"37.157.33.76","conntracked":"true","port":"7160","procspied":"true","topology":"endpoint"},"adjacency":[";10.240.39.22;4040"],"edges":{";10.240.39.22;4040":{"max_conn_count_tcp":1}}},";66.102.1.95;443":{"metadata":{"addr":"66.102.1.95","conntracked":"true","port":"443","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-master;127.0.0.1;10251":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4761","port":"10251","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-master;127.0.0.1;10252":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"10252","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-master;127.0.0.1;10255":{"metadata":{"addr":"127.0.0.1","conntracked":"true","name":"localhost","port":"10255","topology":"endpoint"},"adjacency":[]},"kubernetes-master;127.0.0.1;37041":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37041","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37048":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37048","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37049":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37049","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37057":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37057","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37059":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37059","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37068":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37068","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37130":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37130","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37167":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37167","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37168":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37168","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37169":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37169","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37174":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37174","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37192":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37192","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37193":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"3819","port":"37193","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37212":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37212","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37214":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37214","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37261":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37261","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37280":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37280","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37292":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37292","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37355":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37355","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37385":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37385","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37721":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37721","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37745":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37745","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37746":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37746","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37875":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"37875","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37879":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"37879","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37887":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"37887","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37894":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"37894","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37901":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37901","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37902":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37902","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37904":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"37904","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37907":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"37907","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37908":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37908","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37916":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37916","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37920":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37920","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37922":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37922","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37923":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37923","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37924":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37924","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37927":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37927","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37934":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37934","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37935":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37935","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37938":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37938","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37941":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37941","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37947":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37947","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37957":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37957","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37958":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37958","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37959":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37959","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37960":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37960","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37961":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37961","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;37962":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"37962","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4001"],"edges":{"kubernetes-master;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;39609":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"7514","port":"39609","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4040"],"edges":{"kubernetes-master;127.0.0.1;4040":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;39712":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"7514","port":"39712","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;4040"],"edges":{"kubernetes-master;127.0.0.1;4040":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;4001":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4305","port":"4001","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-master;127.0.0.1;4040":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"7515","port":"4040","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-master;127.0.0.1;43247":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"43247","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;10255"],"edges":{"kubernetes-master;127.0.0.1;10255":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;43274":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"43274","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;10255"],"edges":{"kubernetes-master;127.0.0.1;10255":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50587":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"50587","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50588":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"50588","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50589":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"50589","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50590":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"50590","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50640":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"3819","port":"50640","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50648":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4761","port":"50648","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50649":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4761","port":"50649","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50650":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4761","port":"50650","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50651":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4761","port":"50651","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50652":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4761","port":"50652","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50667":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"50667","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50671":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"50671","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50674":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"50674","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50675":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"50675","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50684":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"50684","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50689":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"50689","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50690":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"50690","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50779":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4761","port":"50779","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50793":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4761","port":"50793","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50840":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"3819","port":"50840","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;10252"],"edges":{"kubernetes-master;127.0.0.1;10252":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;50890":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"50890","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;10252"],"edges":{"kubernetes-master;127.0.0.1;10252":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51248":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"51248","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51268":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51268","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51272":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51272","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51273":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51273","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51274":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51274","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51276":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51276","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51407":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51407","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51422":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51422","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51423":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51423","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51427":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51427","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51430":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51430","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51433":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51433","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51435":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51435","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51436":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51436","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51441":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51441","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51445":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51445","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51449":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51449","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51450":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51450","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51455":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"7514","port":"51455","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51456":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"7514","port":"51456","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51461":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51461","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51463":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51463","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51464":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51464","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51466":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51466","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51467":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51467","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51468":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"7514","port":"51468","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51469":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"7514","port":"51469","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51476":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51476","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51477":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51477","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51478":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51478","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51479":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51479","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;51480":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4776","port":"51480","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;8080"],"edges":{"kubernetes-master;127.0.0.1;8080":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;54321":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"3819","port":"54321","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;10251"],"edges":{"kubernetes-master;127.0.0.1;10251":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;54371":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"54371","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-master;127.0.0.1;10251"],"edges":{"kubernetes-master;127.0.0.1;10251":{"max_conn_count_tcp":1}}},"kubernetes-master;127.0.0.1;8080":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"localhost","pid":"4157","port":"8080","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-y1qq;10.244.0.1;36802":{"metadata":{"addr":"10.244.0.1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3620","port":"36802","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-y1qq;10.244.0.1;44725":{"metadata":{"addr":"10.244.0.1","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3620","port":"44725","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-minion-y1qq;10.244.0.6;6379"],"edges":{"kubernetes-minion-y1qq;10.244.0.6;6379":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.2;40915":{"metadata":{"addr":"10.244.0.2","conntracked":"true","port":"40915","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.2;40919":{"metadata":{"addr":"10.244.0.2","conntracked":"true","port":"40919","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.2;40921":{"metadata":{"addr":"10.244.0.2","conntracked":"true","port":"40921","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.2;40923":{"metadata":{"addr":"10.244.0.2","conntracked":"true","port":"40923","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.2;43855":{"metadata":{"addr":"10.244.0.2","conntracked":"true","port":"43855","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.2;43859":{"metadata":{"addr":"10.244.0.2","conntracked":"true","port":"43859","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.2;43861":{"metadata":{"addr":"10.244.0.2","conntracked":"true","port":"43861","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.2;43863":{"metadata":{"addr":"10.244.0.2","conntracked":"true","port":"43863","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.6;6379":{"metadata":{"addr":"10.244.0.6","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4958","port":"6379","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-y1qq;10.244.0.7;59008":{"metadata":{"addr":"10.244.0.7","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"6085","port":"59008","procspied":"true","topology":"endpoint"},"adjacency":[";10.0.118.122;6379","kubernetes-minion-y1qq;10.244.0.1;36802"],"edges":{";10.0.118.122;6379":{"max_conn_count_tcp":1},"kubernetes-minion-y1qq;10.244.0.1;36802":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;127.0.0.1;10249":{"metadata":{"addr":"127.0.0.1","conntracked":"true","name":"localhost","port":"10249","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-y1qq;127.0.0.1;10255":{"metadata":{"addr":"127.0.0.1","conntracked":"true","name":"localhost","port":"10255","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-y1qq;127.0.0.1;34502":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"34502","topology":"endpoint"},"adjacency":["kubernetes-minion-y1qq;127.0.0.1;10255"],"edges":{"kubernetes-minion-y1qq;127.0.0.1;10255":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;127.0.0.1;51977":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"51977","topology":"endpoint"},"adjacency":["kubernetes-minion-y1qq;127.0.0.1;10249"],"edges":{"kubernetes-minion-y1qq;127.0.0.1;10249":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.1;42113":{"metadata":{"addr":"10.244.1.1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3580","port":"42113","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-ynva;10.244.1.1;53219":{"metadata":{"addr":"10.244.1.1","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3579","port":"53219","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;10.244.1.7;8080"],"edges":{"kubernetes-minion-ynva;10.244.1.7;8080":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.1;54298":{"metadata":{"addr":"10.244.1.1","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3579","port":"54298","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;10.244.1.4;8080"],"edges":{"kubernetes-minion-ynva;10.244.1.4;8080":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.1;58064":{"metadata":{"addr":"10.244.1.1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3580","port":"58064","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;10.244.1.4;42094","kubernetes-minion-ynva;10.244.1.4;42096","kubernetes-minion-ynva;10.244.1.4;42098"],"edges":{"kubernetes-minion-ynva;10.244.1.4;42094":{"max_conn_count_tcp":1},"kubernetes-minion-ynva;10.244.1.4;42096":{"max_conn_count_tcp":1},"kubernetes-minion-ynva;10.244.1.4;42098":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;34292":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"34292","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;34295":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"34295","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;34299":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"34299","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;34301":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"34301","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;34303":{"metadata":{"addr":"10.244.1.3","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5645","port":"34303","procspied":"true","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;34305":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"34305","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;34308":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"34308","topology":"endpoint"},"adjacency":[";66.102.1.95;443"],"edges":{";66.102.1.95;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;51794":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"51794","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;51797":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"51797","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;51801":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"51801","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;51803":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"51803","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;51805":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"51805","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;51807":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"51807","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3;51810":{"metadata":{"addr":"10.244.1.3","conntracked":"true","port":"51810","topology":"endpoint"},"adjacency":[";169.254.169.254;80"],"edges":{";169.254.169.254;80":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.4;42094":{"metadata":{"addr":"10.244.1.4","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4558","port":"42094","procspied":"true","topology":"endpoint"},"adjacency":[";10.0.0.1;443"],"edges":{";10.0.0.1;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.4;42096":{"metadata":{"addr":"10.244.1.4","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4558","port":"42096","procspied":"true","topology":"endpoint"},"adjacency":[";10.0.0.1;443"],"edges":{";10.0.0.1;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.4;42098":{"metadata":{"addr":"10.244.1.4","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4558","port":"42098","procspied":"true","topology":"endpoint"},"adjacency":[";10.0.0.1;443"],"edges":{";10.0.0.1;443":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.4;8080":{"metadata":{"addr":"10.244.1.4","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5048","port":"8080","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-ynva;10.244.1.6;52949":{"metadata":{"addr":"10.244.1.6","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5847","port":"52949","procspied":"true","topology":"endpoint"},"adjacency":[";10.0.118.122;6379","kubernetes-minion-ynva;10.244.1.1;42113"],"edges":{";10.0.118.122;6379":{"max_conn_count_tcp":1},"kubernetes-minion-ynva;10.244.1.1;42113":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.7;8080":{"metadata":{"addr":"10.244.1.7","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5219","port":"8080","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-ynva;127.0.0.1;10249":{"metadata":{"addr":"127.0.0.1","conntracked":"true","name":"localhost","port":"10249","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-ynva;127.0.0.1;10255":{"metadata":{"addr":"127.0.0.1","conntracked":"true","name":"localhost","port":"10255","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-ynva;127.0.0.1;35998":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"35998","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;127.0.0.1;10255"],"edges":{"kubernetes-minion-ynva;127.0.0.1;10255":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;127.0.0.1;36011":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"36011","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;127.0.0.1;10255"],"edges":{"kubernetes-minion-ynva;127.0.0.1;10255":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;127.0.0.1;4001":{"metadata":{"addr":"127.0.0.1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"localhost","pid":"4206","port":"4001","procspied":"true","topology":"endpoint"},"adjacency":[]},"kubernetes-minion-ynva;127.0.0.1;56461":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"56461","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;127.0.0.1;10249"],"edges":{"kubernetes-minion-ynva;127.0.0.1;10249":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;127.0.0.1;56474":{"metadata":{"addr":"127.0.0.1","conntracked":"true","port":"56474","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;127.0.0.1;10249"],"edges":{"kubernetes-minion-ynva;127.0.0.1;10249":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;127.0.0.1;58123":{"metadata":{"addr":"127.0.0.1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"localhost","pid":"4558","port":"58123","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;127.0.0.1;4001"],"edges":{"kubernetes-minion-ynva;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;127.0.0.1;58134":{"metadata":{"addr":"127.0.0.1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"localhost","pid":"4558","port":"58134","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;127.0.0.1;4001"],"edges":{"kubernetes-minion-ynva;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;127.0.0.1;58165":{"metadata":{"addr":"127.0.0.1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"localhost","pid":"4703","port":"58165","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;127.0.0.1;4001"],"edges":{"kubernetes-minion-ynva;127.0.0.1;4001":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;127.0.0.1;58310":{"metadata":{"addr":"127.0.0.1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"localhost","pid":"4703","port":"58310","procspied":"true","topology":"endpoint"},"adjacency":["kubernetes-minion-ynva;127.0.0.1;4001"],"edges":{"kubernetes-minion-ynva;127.0.0.1;4001":{"max_conn_count_tcp":1}}}}},"Address":{"Nodes":{";10.0.0.1":{"metadata":{"addr":"10.0.0.1","conntracked":"true","procspied":"true","topology":"address"},"adjacency":[]},";10.0.118.122":{"metadata":{"addr":"10.0.118.122","conntracked":"true","procspied":"true","topology":"address"},"adjacency":[]},";10.240.105.97":{"metadata":{"addr":"10.240.105.97","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq","pid":"3626","procspied":"true","topology":"address"},"adjacency":[";10.240.39.22",";169.254.169.254"],"edges":{";10.240.39.22":{"max_conn_count_tcp":1},";169.254.169.254":{"max_conn_count_tcp":1}}},";10.240.39.22":{"metadata":{"addr":"10.240.39.22","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"kubernetes-master.c.kubernetes-for-paul.internal","pid":"2361","procspied":"true","topology":"address"},"adjacency":[";169.254.169.254",";173.194.67.95",";37.157.33.76"],"edges":{";169.254.169.254":{"max_conn_count_tcp":1},";173.194.67.95":{"max_conn_count_tcp":1},";37.157.33.76":{"max_conn_count_tcp":1}}},";10.240.72.84":{"metadata":{"addr":"10.240.72.84","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva","pid":"3580","procspied":"true","topology":"address"},"adjacency":[";10.240.39.22",";10.244.0.6",";169.254.169.254","kubernetes-minion-y1qq;10.244.0.6"],"edges":{";10.240.39.22":{"max_conn_count_tcp":1},";10.244.0.6":{"max_conn_count_tcp":1},";169.254.169.254":{"max_conn_count_tcp":1},"kubernetes-minion-y1qq;10.244.0.6":{"max_conn_count_tcp":1}}},";10.244.0.6":{"metadata":{"addr":"10.244.0.6","conntracked":"true","procspied":"true","topology":"address"},"adjacency":[]},";169.254.169.254":{"metadata":{"addr":"169.254.169.254","conntracked":"true","name":"metadata.google.internal","procspied":"true","topology":"address"},"adjacency":[]},";173.194.67.95":{"metadata":{"addr":"173.194.67.95","conntracked":"true","name":"wi-in-f95.1e100.net","procspied":"true","topology":"address"},"adjacency":[]},";37.157.33.76":{"metadata":{"addr":"10.240.39.22","conntracked":"true","name":"kubernetes-master","procspied":"true","topology":"address"},"adjacency":[";10.240.39.22"],"edges":{";10.240.39.22":{"max_conn_count_tcp":1}}},";66.102.1.95":{"metadata":{"addr":"66.102.1.95","conntracked":"true","procspied":"true","topology":"address"},"adjacency":[]},"kubernetes-master;127.0.0.1":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-master;\u003chost\u003e","name":"kubernetes-master","pid":"4157","procspied":"true","topology":"address"},"adjacency":["kubernetes-master;127.0.0.1"],"edges":{"kubernetes-master;127.0.0.1":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.1":{"metadata":{"addr":"10.244.0.1","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq","pid":"3620","procspied":"true","topology":"address"},"adjacency":["kubernetes-minion-y1qq;10.244.0.6"],"edges":{"kubernetes-minion-y1qq;10.244.0.6":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.2":{"metadata":{"addr":"10.244.0.2","conntracked":"true","name":"kubernetes-minion-y1qq","topology":"address"},"adjacency":[";169.254.169.254",";66.102.1.95"],"edges":{";169.254.169.254":{"max_conn_count_tcp":1},";66.102.1.95":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;10.244.0.6":{"metadata":{"addr":"10.244.0.6","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq","pid":"4958","procspied":"true","topology":"address"},"adjacency":[]},"kubernetes-minion-y1qq;10.244.0.7":{"metadata":{"addr":"10.244.0.1","conntracked":"true","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","name":"kubernetes-minion-y1qq","pid":"6085","procspied":"true","topology":"address"},"adjacency":[";10.0.118.122","kubernetes-minion-y1qq;10.244.0.1"],"edges":{";10.0.118.122":{"max_conn_count_tcp":1},"kubernetes-minion-y1qq;10.244.0.1":{"max_conn_count_tcp":1}}},"kubernetes-minion-y1qq;127.0.0.1":{"metadata":{"addr":"127.0.0.1","conntracked":"true","name":"kubernetes-minion-y1qq","topology":"address"},"adjacency":["kubernetes-minion-y1qq;127.0.0.1"],"edges":{"kubernetes-minion-y1qq;127.0.0.1":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.1":{"metadata":{"addr":"10.244.1.1","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva","pid":"3579","procspied":"true","topology":"address"},"adjacency":["kubernetes-minion-ynva;10.244.1.4","kubernetes-minion-ynva;10.244.1.7"],"edges":{"kubernetes-minion-ynva;10.244.1.4":{"max_conn_count_tcp":1},"kubernetes-minion-ynva;10.244.1.7":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.3":{"metadata":{"addr":"10.244.1.3","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva","pid":"5645","procspied":"true","topology":"address"},"adjacency":[";169.254.169.254",";66.102.1.95"],"edges":{";169.254.169.254":{"max_conn_count_tcp":1},";66.102.1.95":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.4":{"metadata":{"addr":"10.244.1.4","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva","pid":"4558","procspied":"true","topology":"address"},"adjacency":[";10.0.0.1"],"edges":{";10.0.0.1":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.6":{"metadata":{"addr":"10.244.1.1","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva","pid":"5847","procspied":"true","topology":"address"},"adjacency":[";10.0.118.122","kubernetes-minion-ynva;10.244.1.1"],"edges":{";10.0.118.122":{"max_conn_count_tcp":1},"kubernetes-minion-ynva;10.244.1.1":{"max_conn_count_tcp":1}}},"kubernetes-minion-ynva;10.244.1.7":{"metadata":{"addr":"10.244.1.7","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva","pid":"5219","procspied":"true","topology":"address"},"adjacency":[]},"kubernetes-minion-ynva;127.0.0.1":{"metadata":{"addr":"127.0.0.1","conntracked":"true","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","name":"kubernetes-minion-ynva","pid":"4206","procspied":"true","topology":"address"},"adjacency":["kubernetes-minion-ynva;127.0.0.1"],"edges":{"kubernetes-minion-ynva;127.0.0.1":{"max_conn_count_tcp":1}}}}},"Process":{"Nodes":{"kubernetes-master;1":{"metadata":{"cmdline":"init [2] ","comm":"init","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;10":{"metadata":{"comm":"watchdog/0","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"10","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;10317":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_accounts.py --daemon ","comm":"manage_accounts","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"10317","ppid":"2343","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;10955":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"10955","ppid":"3770","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;10958":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"10958","ppid":"3768","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;10973":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"10973","ppid":"3769","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11":{"metadata":{"comm":"khelper","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11013":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11013","ppid":"5273","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11022":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11022","ppid":"5277","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11100":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11100","ppid":"3770","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11103":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11103","ppid":"3768","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11118":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11118","ppid":"3769","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11165":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11165","ppid":"5273","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11174":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11174","ppid":"5277","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11209":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_accounts.py --daemon ","comm":"manage_accounts","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11209","ppid":"2343","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;11262":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11262","ppid":"3770","threads":"1","topology":"process"},"adjacency":null},"kubernetes-master;11264":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11264","ppid":"3768","threads":"1","topology":"process"},"adjacency":null},"kubernetes-master;11278":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"11278","ppid":"3769","threads":"1","topology":"process"},"adjacency":null},"kubernetes-master;12":{"metadata":{"comm":"kdevtmpfs","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"12","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;13":{"metadata":{"comm":"netns","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"13","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;138":{"metadata":{"comm":"scsi_eh_0","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"138","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;139":{"metadata":{"comm":"scsi_tmf_0","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"139","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;14":{"metadata":{"comm":"khungtaskd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"14","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;140":{"metadata":{"comm":"kworker/u2:2","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"140","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;15":{"metadata":{"comm":"writeback","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"15","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;155":{"metadata":{"comm":"kworker/0:1H","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"155","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;16":{"metadata":{"comm":"ksmd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"16","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;1677":{"metadata":{"cmdline":"dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 ","comm":"dhclient","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"1677","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;17":{"metadata":{"comm":"khugepaged","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"17","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;18":{"metadata":{"comm":"crypto","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"18","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;180":{"metadata":{"comm":"jbd2/sda1-8","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"180","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;181":{"metadata":{"comm":"ext4-rsv-conver","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"181","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;1867":{"metadata":{"cmdline":"/usr/sbin/rsyslogd -c5 ","comm":"rsyslogd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"1867","ppid":"1","threads":"4","topology":"process"},"adjacency":[]},"kubernetes-master;1899":{"metadata":{"cmdline":"/usr/sbin/acpid ","comm":"acpid","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"1899","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;19":{"metadata":{"comm":"kintegrityd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"19","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;1950":{"metadata":{"cmdline":"/usr/sbin/cron ","comm":"cron","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"1950","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;2":{"metadata":{"comm":"kthreadd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;20":{"metadata":{"comm":"bioset","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"20","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;21":{"metadata":{"comm":"kblockd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"21","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;22":{"metadata":{"comm":"kworker/0:1","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"22","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;2263":{"metadata":{"cmdline":"/usr/sbin/sshd ","comm":"sshd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2263","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;23":{"metadata":{"comm":"kswapd0","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"23","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;2341":{"metadata":{"cmdline":"startpar -f -- google-accounts-manager ","comm":"startpar","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2341","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;2343":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_accounts.py --daemon ","comm":"manage_accounts","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2343","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;2361":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_addresses.py ","comm":"manage_addresse","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2361","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;2373":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_clock_sync.py ","comm":"manage_clock_sy","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2373","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;24":{"metadata":{"comm":"fsnotify_mark","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"24","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;2428":{"metadata":{"cmdline":"/usr/sbin/ntpd -p /var/run/ntpd.pid -g -c /var/lib/ntp/ntp.conf.dhcp -u 101:103 ","comm":"ntpd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2428","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;2567":{"metadata":{"comm":"jbd2/sdb-8","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2567","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;2568":{"metadata":{"comm":"ext4-rsv-conver","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"2568","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;3":{"metadata":{"comm":"ksoftirqd/0","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"3","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;30":{"metadata":{"comm":"kthrotld","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"30","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;31":{"metadata":{"comm":"ipv6_addrconf","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"31","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;32":{"metadata":{"comm":"kworker/0:2","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"32","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;33":{"metadata":{"comm":"deferwq","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"33","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;34":{"metadata":{"comm":"kworker/u2:1","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"34","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;340":{"metadata":{"cmdline":"udevd --daemon ","comm":"udevd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"340","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;3704":{"metadata":{"cmdline":"/usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf ","comm":"supervisord","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"3704","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;3768":{"metadata":{"cmdline":"/bin/bash /usr/sbin/kubelet-checker.sh ","comm":"kubelet-checker","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"3768","ppid":"3704","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;3769":{"metadata":{"cmdline":"/bin/bash /usr/sbin/docker-checker.sh ","comm":"docker-checker.","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"3769","ppid":"3704","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;3770":{"metadata":{"cmdline":"/bin/bash /usr/sbin/kube-addons-checker.sh ","comm":"kube-addons-che","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"3770","ppid":"3704","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;3819":{"metadata":{"cmdline":"/usr/local/bin/kubelet --enable-debugging-handlers=false --cloud-provider=gce --config=/etc/kubernetes/manifests --manifest-url=http://metadata.google.internal/computeMetadata/v1/instance/attributes/google-container-manifest --manifest-url-header=Metadata-Flavor:Google --allow-privileged=False --v=2 --cluster-dns=10.0.0.10 --cluster-domain=cluster.local --configure-cbr0=true --cgroup-root=/ --system-container=/system --pod-cidr=10.246.0.0/24 ","comm":"kubelet","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"3819","ppid":"1","threads":"9","topology":"process"},"adjacency":[]},"kubernetes-master;3917":{"metadata":{"cmdline":"/usr/bin/docker -d -p /var/run/docker.pid --bridge=cbr0 --iptables=false --ip-masq=false ","comm":"docker","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"3917","ppid":"1","threads":"54","topology":"process"},"adjacency":[]},"kubernetes-master;3963":{"metadata":{"cmdline":"/bin/bash /etc/kubernetes/kube-addons.sh ","comm":"kube-addons.sh","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"3963","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4004":{"metadata":{"cmdline":"/sbin/getty 38400 tty1 ","comm":"getty","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4004","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4005":{"metadata":{"cmdline":"/sbin/getty 38400 tty2 ","comm":"getty","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4005","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4006":{"metadata":{"cmdline":"/sbin/getty 38400 tty3 ","comm":"getty","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4006","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4007":{"metadata":{"cmdline":"/sbin/getty 38400 tty4 ","comm":"getty","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4007","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4008":{"metadata":{"cmdline":"/sbin/getty 38400 tty5 ","comm":"getty","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4008","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4009":{"metadata":{"cmdline":"/sbin/getty 38400 tty6 ","comm":"getty","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4009","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4016":{"metadata":{"cmdline":"udevd --daemon ","comm":"udevd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4016","ppid":"340","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4017":{"metadata":{"cmdline":"udevd --daemon ","comm":"udevd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4017","ppid":"340","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4034":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"813d2b0ed0ab4bdc531bd24f2cba96c1e18c3ffbf9d69f579177320d9954dd8e","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4034","ppid":"3917","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-master;4078":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"f32e8d6a30e13254786e5e0f9c77dd90bdae9c6711b9bfd478f4e8c9daf73232","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4078","ppid":"3917","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-master;4089":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"4463eef0d073e38af05affad5e17948f791f5fbd022e7b91c22250f12f49e9e5","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4089","ppid":"3917","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-master;4101":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"7e2e832247d08146b42744612edca16118e83546e183a981bb8e4301e55e4162","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4101","ppid":"3917","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-master;4117":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"9d0e57c1f80090d01bf2b9f711127ebf281a1801dab12e6f9ef74f240cd17351","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4117","ppid":"3917","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-master;4146":{"metadata":{"cmdline":"/bin/sh -c /usr/local/bin/kube-apiserver --address=127.0.0.1 --etcd-servers=http://127.0.0.1:4001 --cloud-provider=gce --admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,DenyEscalatingExec,ResourceQuota --service-cluster-ip-range=10.0.0.0/16 --client-ca-file=/srv/kubernetes/ca.crt --basic-auth-file=/srv/kubernetes/basic_auth.csv --cluster-name=kubernetes --tls-cert-file=/srv/kubernetes/server.cert --tls-private-key-file=/srv/kubernetes/server.key --secure-port=443 --token-auth-file=/srv/kubernetes/known_tokens.csv --v=2 --allow-privileged=False 1\u003e\u003e/var/log/kube-apiserver.log 2\u003e\u00261 ","comm":"sh","docker_container_id":"4f86be6687f5c57358a01470fba0365fb64237bf22cbcc5655cce1855a13a04e","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4146","ppid":"3917","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4157":{"metadata":{"cmdline":"/usr/local/bin/kube-apiserver --address=127.0.0.1 --etcd-servers=http://127.0.0.1:4001 --cloud-provider=gce --admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,DenyEscalatingExec,ResourceQuota --service-cluster-ip-range=10.0.0.0/16 --client-ca-file=/srv/kubernetes/ca.crt --basic-auth-file=/srv/kubernetes/basic_auth.csv --cluster-name=kubernetes --tls-cert-file=/srv/kubernetes/server.cert --tls-private-key-file=/srv/kubernetes/server.key --secure-port=443 --token-auth-file=/srv/kubernetes/known_tokens.csv --v=2 --allow-privileged=False ","comm":"kube-apiserver","docker_container_id":"4f86be6687f5c57358a01470fba0365fb64237bf22cbcc5655cce1855a13a04e","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4157","ppid":"4146","threads":"7","topology":"process"},"adjacency":[]},"kubernetes-master;4299":{"metadata":{"cmdline":"/bin/sh -c /usr/local/bin/etcd --addr 127.0.0.1:4001 --bind-addr 127.0.0.1:4001 --data-dir /var/etcd/data 1\u003e\u003e/var/log/etcd.log 2\u003e\u00261 ","comm":"sh","docker_container_id":"908699693a3f4a53810f76c203cbd53dbc894a4bebec0c35ffcbecdab34c6630","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4299","ppid":"3917","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4305":{"metadata":{"cmdline":"/usr/local/bin/etcd --addr 127.0.0.1:4001 --bind-addr 127.0.0.1:4001 --data-dir /var/etcd/data ","comm":"etcd","docker_container_id":"908699693a3f4a53810f76c203cbd53dbc894a4bebec0c35ffcbecdab34c6630","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4305","ppid":"4299","threads":"7","topology":"process"},"adjacency":[]},"kubernetes-master;4748":{"metadata":{"cmdline":"/bin/sh -c /usr/local/bin/kube-scheduler --master=127.0.0.1:8080 --v=2 1\u003e\u003e/var/log/kube-scheduler.log 2\u003e\u00261 ","comm":"sh","docker_container_id":"0424119ab8935a0f81c0fd08d62d29c2245754195c0bc9347c299ea4ec58f0bc","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4748","ppid":"3917","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4761":{"metadata":{"cmdline":"/usr/local/bin/kube-scheduler --master=127.0.0.1:8080 --v=2 ","comm":"kube-scheduler","docker_container_id":"0424119ab8935a0f81c0fd08d62d29c2245754195c0bc9347c299ea4ec58f0bc","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4761","ppid":"4748","threads":"5","topology":"process"},"adjacency":[]},"kubernetes-master;4769":{"metadata":{"cmdline":"/bin/sh -c /usr/local/bin/kube-controller-manager --master=127.0.0.1:8080 --cluster-name=kubernetes --cluster-cidr=10.244.0.0/16 --allocate-node-cidrs=true --enable-horizontal-pod-autoscaler=false --cloud-provider=gce --service-account-private-key-file=/srv/kubernetes/server.key --v=2 --root-ca-file=/srv/kubernetes/ca.crt 1\u003e\u003e/var/log/kube-controller-manager.log 2\u003e\u00261 ","comm":"sh","docker_container_id":"c1a7eebbce890527854b2f253881f931d9945628011694a409dee8f453e65cfd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4769","ppid":"3917","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4776":{"metadata":{"cmdline":"/usr/local/bin/kube-controller-manager --master=127.0.0.1:8080 --cluster-name=kubernetes --cluster-cidr=10.244.0.0/16 --allocate-node-cidrs=true --enable-horizontal-pod-autoscaler=false --cloud-provider=gce --service-account-private-key-file=/srv/kubernetes/server.key --v=2 --root-ca-file=/srv/kubernetes/ca.crt ","comm":"kube-controller","docker_container_id":"c1a7eebbce890527854b2f253881f931d9945628011694a409dee8f453e65cfd","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4776","ppid":"4769","threads":"5","topology":"process"},"adjacency":[]},"kubernetes-master;487":{"metadata":{"comm":"kpsmoused","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"487","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4916":{"metadata":{"cmdline":"/bin/bash /etc/kubernetes/kube-addon-update.sh /etc/kubernetes/addons 600 ","comm":"kube-addon-upda","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4916","ppid":"3963","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;4921":{"metadata":{"cmdline":"/bin/bash /etc/kubernetes/kube-addon-update.sh /etc/kubernetes/addons 600 ","comm":"kube-addon-upda","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"4921","ppid":"4916","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;5":{"metadata":{"comm":"kworker/0:0H","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"5","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;5273":{"metadata":{"cmdline":"/bin/bash /etc/kubernetes/kube-addon-update.sh /etc/kubernetes/addons 600 ","comm":"kube-addon-upda","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"5273","ppid":"4921","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;5277":{"metadata":{"cmdline":"/bin/bash /etc/kubernetes/kube-addon-update.sh /etc/kubernetes/addons 600 ","comm":"kube-addon-upda","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"5277","ppid":"4921","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;5562":{"metadata":{"cmdline":"/bin/sh -c /usr/sbin/google-fluentd \"$FLUENTD_ARGS\" ","comm":"sh","docker_container_id":"41128771f496341ec64179166a056d525bd677a5cc84c0ed9ce0db3cd833c60f","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"5562","ppid":"3917","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;5570":{"metadata":{"cmdline":"/opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd -q ","comm":"google-fluentd","docker_container_id":"41128771f496341ec64179166a056d525bd677a5cc84c0ed9ce0db3cd833c60f","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"5570","ppid":"5562","threads":"2","topology":"process"},"adjacency":[]},"kubernetes-master;5578":{"metadata":{"cmdline":"/opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd -q ","comm":"google-fluentd","docker_container_id":"41128771f496341ec64179166a056d525bd677a5cc84c0ed9ce0db3cd833c60f","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"5578","ppid":"5570","threads":"14","topology":"process"},"adjacency":[]},"kubernetes-master;7":{"metadata":{"comm":"rcu_sched","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"7","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;7478":{"metadata":{"cmdline":"/home/weave/runsvinit ","comm":"runsvinit","docker_container_id":"877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"7478","ppid":"3917","threads":"4","topology":"process"},"adjacency":[]},"kubernetes-master;7511":{"metadata":{"cmdline":"/sbin/runsvdir /etc/service ","comm":"runsvdir","docker_container_id":"877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"7511","ppid":"7478","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;7512":{"metadata":{"cmdline":"runsv app ","comm":"runsv","docker_container_id":"877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"7512","ppid":"7511","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;7513":{"metadata":{"cmdline":"runsv probe ","comm":"runsv","docker_container_id":"877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"7513","ppid":"7511","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;7514":{"metadata":{"cmdline":"/home/weave/scope-probe -docker=true -docker.bridge=cbr0 -kubernetes=true ","comm":"scope-probe","docker_container_id":"877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"7514","ppid":"7513","threads":"10","topology":"process"},"adjacency":[]},"kubernetes-master;7515":{"metadata":{"cmdline":"/home/weave/scope-app ","comm":"scope-app","docker_container_id":"877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"7515","ppid":"7512","threads":"6","topology":"process"},"adjacency":[]},"kubernetes-master;7545":{"metadata":{"cmdline":"conntrack -E -o xml -p tcp --any-nat ","comm":"conntrack","docker_container_id":"877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"7545","ppid":"7514","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;7578":{"metadata":{"cmdline":"conntrack -E -o xml -p tcp ","comm":"conntrack","docker_container_id":"877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"7578","ppid":"7514","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;8":{"metadata":{"comm":"rcu_bh","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"8","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-master;9":{"metadata":{"comm":"migration/0","host_node_id":"kubernetes-master;\u003chost\u003e","pid":"9","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;1":{"metadata":{"cmdline":"init [2] ","comm":"init","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;10":{"metadata":{"comm":"watchdog/0","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"10","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;11":{"metadata":{"comm":"khelper","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"11","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;12":{"metadata":{"comm":"kdevtmpfs","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"12","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;127":{"metadata":{"comm":"scsi_eh_0","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"127","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;128":{"metadata":{"comm":"scsi_tmf_0","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"128","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;129":{"metadata":{"comm":"kworker/u2:2","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"129","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;13":{"metadata":{"comm":"netns","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"13","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;14":{"metadata":{"comm":"khungtaskd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"14","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;140":{"metadata":{"comm":"kworker/0:1H","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"140","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;14085":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_accounts.py --daemon ","comm":"manage_accounts","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"14085","ppid":"2335","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;14356":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"14356","ppid":"3573","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;14358":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"14358","ppid":"3571","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;14372":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"14372","ppid":"3572","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;14664":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"14664","ppid":"3573","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;14666":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"14666","ppid":"3571","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;14678":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"14678","ppid":"3572","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;15":{"metadata":{"comm":"writeback","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"15","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;16":{"metadata":{"comm":"ksmd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"16","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;1680":{"metadata":{"cmdline":"dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 ","comm":"dhclient","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"1680","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;17":{"metadata":{"comm":"khugepaged","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"17","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;18":{"metadata":{"comm":"crypto","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"18","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;1865":{"metadata":{"cmdline":"/usr/sbin/rsyslogd -c5 ","comm":"rsyslogd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"1865","ppid":"1","threads":"4","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;1897":{"metadata":{"cmdline":"/usr/sbin/acpid ","comm":"acpid","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"1897","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;19":{"metadata":{"comm":"kintegrityd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"19","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;1943":{"metadata":{"cmdline":"/usr/sbin/cron ","comm":"cron","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"1943","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;2":{"metadata":{"comm":"kthreadd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;20":{"metadata":{"comm":"bioset","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"20","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;203":{"metadata":{"comm":"jbd2/sda1-8","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"203","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;204":{"metadata":{"comm":"ext4-rsv-conver","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"204","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;21":{"metadata":{"comm":"kblockd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"21","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;22":{"metadata":{"comm":"kworker/0:1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"22","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;2250":{"metadata":{"cmdline":"/usr/sbin/sshd ","comm":"sshd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"2250","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;23":{"metadata":{"comm":"kswapd0","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"23","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;2333":{"metadata":{"cmdline":"startpar -f -- google-accounts-manager ","comm":"startpar","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"2333","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;2335":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_accounts.py --daemon ","comm":"manage_accounts","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"2335","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;2351":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_addresses.py ","comm":"manage_addresse","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"2351","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;2361":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_clock_sync.py ","comm":"manage_clock_sy","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"2361","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;24":{"metadata":{"comm":"fsnotify_mark","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"24","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;2416":{"metadata":{"cmdline":"/usr/sbin/ntpd -p /var/run/ntpd.pid -g -c /var/lib/ntp/ntp.conf.dhcp -u 101:103 ","comm":"ntpd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"2416","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3":{"metadata":{"comm":"ksoftirqd/0","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;30":{"metadata":{"comm":"kthrotld","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"30","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;31":{"metadata":{"comm":"ipv6_addrconf","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"31","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;32":{"metadata":{"comm":"kworker/0:2","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"32","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;33":{"metadata":{"comm":"deferwq","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"33","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;34":{"metadata":{"comm":"kworker/u2:1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"34","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;351":{"metadata":{"cmdline":"udevd --daemon ","comm":"udevd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"351","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3533":{"metadata":{"cmdline":"/usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf ","comm":"supervisord","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3533","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3537":{"metadata":{"cmdline":"/sbin/getty 38400 tty1 ","comm":"getty","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3537","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3538":{"metadata":{"cmdline":"/sbin/getty 38400 tty2 ","comm":"getty","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3538","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3539":{"metadata":{"cmdline":"/sbin/getty 38400 tty3 ","comm":"getty","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3539","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3540":{"metadata":{"cmdline":"/sbin/getty 38400 tty4 ","comm":"getty","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3540","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3541":{"metadata":{"cmdline":"/sbin/getty 38400 tty5 ","comm":"getty","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3541","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3542":{"metadata":{"cmdline":"/sbin/getty 38400 tty6 ","comm":"getty","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3542","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3571":{"metadata":{"cmdline":"/bin/bash /usr/sbin/kubelet-checker.sh ","comm":"kubelet-checker","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3571","ppid":"3533","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3572":{"metadata":{"cmdline":"/bin/bash /usr/sbin/docker-checker.sh ","comm":"docker-checker.","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3572","ppid":"3533","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3573":{"metadata":{"cmdline":"/bin/bash /usr/sbin/kube-proxy-checker.sh ","comm":"kube-proxy-chec","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3573","ppid":"3533","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3620":{"metadata":{"cmdline":"/usr/local/bin/kube-proxy --master=https://kubernetes-master --kubeconfig=/var/lib/kube-proxy/kubeconfig --v=2 ","comm":"kube-proxy","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3620","ppid":"1","threads":"7","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3626":{"metadata":{"cmdline":"/usr/local/bin/kubelet --api-servers=https://kubernetes-master --enable-debugging-handlers=true --cloud-provider=gce --config=/etc/kubernetes/manifests --allow-privileged=False --v=2 --cluster-dns=10.0.0.10 --cluster-domain=cluster.local --configure-cbr0=true --cgroup-root=/ --system-container=/system ","comm":"kubelet","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3626","ppid":"1","threads":"11","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;3974":{"metadata":{"cmdline":"/usr/bin/docker -d -p /var/run/docker.pid --bridge=cbr0 --iptables=false --ip-masq=false ","comm":"docker","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"3974","ppid":"1","threads":"99","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4029":{"metadata":{"cmdline":"docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5000 -container-ip 10.244.0.3 -container-port 5000 ","comm":"exe","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4029","ppid":"3974","threads":"6","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4058":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"363980693d9aeae2f12b24f45fb99017a26122ecfe59cb1a1999a572f7b0ec61","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4058","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4073":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"0aace0cadd4c247dea50cdd60a67777624aff2eb50836f889b5104595c4736d7","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4073","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4199":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"8d4b7e717583ecd1933b959407075f511a0d806f39cdebf308e7ae57d2b9cdcb","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4199","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4244":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"8dadee0a334a3a3ca015f9ab07511a0a6adadc5f65ca7dca741ff5035c2df30a","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4244","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4300":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"bd3c091dbc0d8fdd9a3fa51ccf88e28800a3e3473093f3083bd0de70ffb4caee","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4300","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4317":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"dd02582c005bf93bcdf0a44f1a284696b156ea3689a619a4df2fcc954ca28779","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4317","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4637":{"metadata":{"cmdline":"docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8086 -container-ip 10.244.0.8 -container-port 8086 ","comm":"exe","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4637","ppid":"3974","threads":"6","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4663":{"metadata":{"cmdline":"docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8083 -container-ip 10.244.0.8 -container-port 8083 ","comm":"exe","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4663","ppid":"3974","threads":"6","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4679":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"774f6794e5855014f3120a145391cfa79410dc5eb848426f00fd7401cfa761cc","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4679","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4753":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"2dec0d75eeb06ab5bb68aab182c34593bc825ddbe456516e12bf5ad7dda6d1a3","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4753","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4917":{"metadata":{"cmdline":"udevd --daemon ","comm":"udevd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4917","ppid":"351","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;4958":{"metadata":{"cmdline":"redis-server *:6379","comm":"redis-server","docker_container_id":"077fa66f18543d7f26a27e49a872f14cace6e69b866df69cce2d20da74da1f41","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"4958","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;5":{"metadata":{"comm":"kworker/0:0H","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"5","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;5075":{"metadata":{"comm":"jbd2/sdb-8","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"5075","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;5076":{"metadata":{"comm":"ext4-rsv-conver","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"5076","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;5094":{"metadata":{"cmdline":"udevd --daemon ","comm":"udevd","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"5094","ppid":"351","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;5118":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"47cc6211a1ef3633e9cd1edb7916bb6d1657a24282b63341cb00f1a4c32cbfa7","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"5118","ppid":"3974","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;526":{"metadata":{"comm":"kpsmoused","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"526","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;5540":{"metadata":{"cmdline":"haproxy -f /proxy.conf ","comm":"haproxy","docker_container_id":"d6083be9dcb81523e1096c22fb687ac6a5b26ab56ba54afe7ecd40834696778b","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"5540","ppid":"3974","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;6078":{"metadata":{"cmdline":"/bin/sh -c /run.sh ","comm":"sh","docker_container_id":"ff5d05e745bfa9b137796a1503257fcf13780dc51df19a62de6715da2aef95f3","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"6078","ppid":"3974","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;6084":{"metadata":{"cmdline":"/bin/bash /run.sh ","comm":"run.sh","docker_container_id":"ff5d05e745bfa9b137796a1503257fcf13780dc51df19a62de6715da2aef95f3","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"6084","ppid":"6078","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;6085":{"metadata":{"cmdline":"redis-server *:6379 ","comm":"redis-server","docker_container_id":"ff5d05e745bfa9b137796a1503257fcf13780dc51df19a62de6715da2aef95f3","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"6085","ppid":"6084","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;6341":{"metadata":{"cmdline":"/bin/registry /etc/docker/registry/config.yml ","comm":"registry","docker_container_id":"4c4c854a9fdcf8291ebeb728deec991aebfc3170515dfc648f429a40825ecba5","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"6341","ppid":"3974","threads":"6","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;6677":{"metadata":{"cmdline":"/bin/sh -c /usr/sbin/google-fluentd \"$FLUENTD_ARGS\" ","comm":"sh","docker_container_id":"7ce5986d56104fe6ba4fb195ca20687ff1083c6209963edbc4a8671c677b41c3","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"6677","ppid":"3974","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;6686":{"metadata":{"cmdline":"influxdb --config /config/config.toml ","comm":"influxdb","docker_container_id":"a09552aebd3e8c7f2c69d15f2cdff477cb39990826e539ac93e813b2f8875ddc","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"6686","ppid":"3974","threads":"6","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;6688":{"metadata":{"cmdline":"/opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd -q ","comm":"google-fluentd","docker_container_id":"7ce5986d56104fe6ba4fb195ca20687ff1083c6209963edbc4a8671c677b41c3","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"6688","ppid":"6677","threads":"2","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;6723":{"metadata":{"cmdline":"/opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd -q ","comm":"google-fluentd","docker_container_id":"7ce5986d56104fe6ba4fb195ca20687ff1083c6209963edbc4a8671c677b41c3","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"6723","ppid":"6688","threads":"14","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7":{"metadata":{"comm":"rcu_sched","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7169":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"a4ddbb92b4c38637e838741594e541f5d1365e0d84ab74dcd259ee5e892907e1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7169","ppid":"3974","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7172":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"877f07b53b70df831654cf80c9b030894774d85fb2f6a09f41e7490a967f1a26","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7172","ppid":"3974","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7191":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"877f07b53b70df831654cf80c9b030894774d85fb2f6a09f41e7490a967f1a26","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7191","ppid":"7172","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7192":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"877f07b53b70df831654cf80c9b030894774d85fb2f6a09f41e7490a967f1a26","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7192","ppid":"7172","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7193":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"877f07b53b70df831654cf80c9b030894774d85fb2f6a09f41e7490a967f1a26","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7193","ppid":"7172","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7194":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"877f07b53b70df831654cf80c9b030894774d85fb2f6a09f41e7490a967f1a26","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7194","ppid":"7172","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7195":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"877f07b53b70df831654cf80c9b030894774d85fb2f6a09f41e7490a967f1a26","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7195","ppid":"7172","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7196":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"a4ddbb92b4c38637e838741594e541f5d1365e0d84ab74dcd259ee5e892907e1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7196","ppid":"7169","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7197":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"a4ddbb92b4c38637e838741594e541f5d1365e0d84ab74dcd259ee5e892907e1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7197","ppid":"7169","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7198":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"a4ddbb92b4c38637e838741594e541f5d1365e0d84ab74dcd259ee5e892907e1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7198","ppid":"7169","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7199":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"a4ddbb92b4c38637e838741594e541f5d1365e0d84ab74dcd259ee5e892907e1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7199","ppid":"7169","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7200":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"a4ddbb92b4c38637e838741594e541f5d1365e0d84ab74dcd259ee5e892907e1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7200","ppid":"7169","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7293":{"metadata":{"cmdline":"/usr/sbin/grafana-server --config /etc/grafana/grafana.ini cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana ","comm":"grafana-server","docker_container_id":"6bcacea7bac8cf8de045286cf780802cfb1a072b6f8bbe7aee9287a328a55db2","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7293","ppid":"3974","threads":"5","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7856":{"metadata":{"cmdline":"/home/weave/runsvinit ","comm":"runsvinit","docker_container_id":"673420131e3333e324b88fe6ad6a9524b394f5b5a7bbf2db81346263ebb14bd9","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7856","ppid":"3974","threads":"4","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7885":{"metadata":{"cmdline":"/sbin/runsvdir /etc/service ","comm":"runsvdir","docker_container_id":"673420131e3333e324b88fe6ad6a9524b394f5b5a7bbf2db81346263ebb14bd9","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7885","ppid":"7856","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7935":{"metadata":{"cmdline":"runsv app ","comm":"runsv","docker_container_id":"673420131e3333e324b88fe6ad6a9524b394f5b5a7bbf2db81346263ebb14bd9","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7935","ppid":"7885","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7936":{"metadata":{"cmdline":"runsv probe ","comm":"runsv","docker_container_id":"673420131e3333e324b88fe6ad6a9524b394f5b5a7bbf2db81346263ebb14bd9","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7936","ppid":"7885","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7937":{"metadata":{"cmdline":"/home/weave/scope-probe -docker=true -docker.bridge=cbr0 kubernetes-master ","comm":"scope-probe","docker_container_id":"673420131e3333e324b88fe6ad6a9524b394f5b5a7bbf2db81346263ebb14bd9","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7937","ppid":"7936","threads":"8","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7959":{"metadata":{"cmdline":"conntrack -E -o xml -p tcp --any-nat ","comm":"conntrack","docker_container_id":"673420131e3333e324b88fe6ad6a9524b394f5b5a7bbf2db81346263ebb14bd9","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7959","ppid":"7937","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;7980":{"metadata":{"cmdline":"conntrack -E -o xml -p tcp ","comm":"conntrack","docker_container_id":"673420131e3333e324b88fe6ad6a9524b394f5b5a7bbf2db81346263ebb14bd9","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"7980","ppid":"7937","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;8":{"metadata":{"comm":"rcu_bh","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"8","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-y1qq;9":{"metadata":{"comm":"migration/0","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","pid":"9","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;1":{"metadata":{"cmdline":"init [2] ","comm":"init","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;10":{"metadata":{"comm":"watchdog/0","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"10","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;11":{"metadata":{"comm":"khelper","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"11","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;12":{"metadata":{"comm":"kdevtmpfs","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"12","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;127":{"metadata":{"comm":"scsi_eh_0","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"127","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;128":{"metadata":{"comm":"scsi_tmf_0","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"128","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;12844":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_accounts.py --daemon ","comm":"manage_accounts","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"12844","ppid":"2334","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;129":{"metadata":{"comm":"kworker/u2:2","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"129","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13":{"metadata":{"comm":"netns","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13360":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13360","ppid":"3530","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13404":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13404","ppid":"3528","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13422":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13422","ppid":"3529","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13647":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13647","ppid":"3530","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13691":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13691","ppid":"3528","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13710":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13710","ppid":"3529","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13931":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13931","ppid":"3530","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13975":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13975","ppid":"3528","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;13994":{"metadata":{"cmdline":"sleep 10 ","comm":"sleep","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"13994","ppid":"3529","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;14":{"metadata":{"comm":"khungtaskd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"14","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;140":{"metadata":{"comm":"kworker/0:1H","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"140","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;15":{"metadata":{"comm":"writeback","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"15","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;16":{"metadata":{"comm":"ksmd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"16","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;1682":{"metadata":{"cmdline":"dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 ","comm":"dhclient","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"1682","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;17":{"metadata":{"comm":"khugepaged","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"17","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;18":{"metadata":{"comm":"crypto","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"18","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;1867":{"metadata":{"cmdline":"/usr/sbin/rsyslogd -c5 ","comm":"rsyslogd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"1867","ppid":"1","threads":"4","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;19":{"metadata":{"comm":"kintegrityd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"19","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;1901":{"metadata":{"cmdline":"/usr/sbin/acpid ","comm":"acpid","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"1901","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;1947":{"metadata":{"cmdline":"/usr/sbin/cron ","comm":"cron","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"1947","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;2":{"metadata":{"comm":"kthreadd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;20":{"metadata":{"comm":"bioset","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"20","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;203":{"metadata":{"comm":"jbd2/sda1-8","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"203","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;204":{"metadata":{"comm":"ext4-rsv-conver","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"204","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;21":{"metadata":{"comm":"kblockd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"21","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;22":{"metadata":{"comm":"kworker/0:1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"22","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;2254":{"metadata":{"cmdline":"/usr/sbin/sshd ","comm":"sshd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"2254","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;23":{"metadata":{"comm":"kswapd0","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"23","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;2333":{"metadata":{"cmdline":"startpar -f -- google-accounts-manager ","comm":"startpar","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"2333","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;2334":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_accounts.py --daemon ","comm":"manage_accounts","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"2334","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;2371":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_addresses.py ","comm":"manage_addresse","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"2371","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;2380":{"metadata":{"cmdline":"/usr/bin/python /usr/share/google/google_daemon/manage_clock_sync.py ","comm":"manage_clock_sy","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"2380","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;2390":{"metadata":{"cmdline":"/usr/sbin/ntpd -p /var/run/ntpd.pid -g -c /var/lib/ntp/ntp.conf.dhcp -u 101:103 ","comm":"ntpd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"2390","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;24":{"metadata":{"comm":"fsnotify_mark","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"24","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3":{"metadata":{"comm":"ksoftirqd/0","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;30":{"metadata":{"comm":"kthrotld","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"30","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;31":{"metadata":{"comm":"ipv6_addrconf","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"31","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;32":{"metadata":{"comm":"kworker/0:2","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"32","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;33":{"metadata":{"comm":"deferwq","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"33","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;34":{"metadata":{"comm":"kworker/u2:1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"34","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3508":{"metadata":{"cmdline":"/usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf ","comm":"supervisord","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3508","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;351":{"metadata":{"cmdline":"udevd --daemon ","comm":"udevd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"351","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3528":{"metadata":{"cmdline":"/bin/bash /usr/sbin/kubelet-checker.sh ","comm":"kubelet-checker","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3528","ppid":"3508","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3529":{"metadata":{"cmdline":"/bin/bash /usr/sbin/docker-checker.sh ","comm":"docker-checker.","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3529","ppid":"3508","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3530":{"metadata":{"cmdline":"/bin/bash /usr/sbin/kube-proxy-checker.sh ","comm":"kube-proxy-chec","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3530","ppid":"3508","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3579":{"metadata":{"cmdline":"/usr/local/bin/kubelet --api-servers=https://kubernetes-master --enable-debugging-handlers=true --cloud-provider=gce --config=/etc/kubernetes/manifests --allow-privileged=False --v=2 --cluster-dns=10.0.0.10 --cluster-domain=cluster.local --configure-cbr0=true --cgroup-root=/ --system-container=/system ","comm":"kubelet","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3579","ppid":"1","threads":"12","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3580":{"metadata":{"cmdline":"/usr/local/bin/kube-proxy --master=https://kubernetes-master --kubeconfig=/var/lib/kube-proxy/kubeconfig --v=2 ","comm":"kube-proxy","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3580","ppid":"1","threads":"7","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3695":{"metadata":{"cmdline":"/sbin/getty 38400 tty1 ","comm":"getty","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3695","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3696":{"metadata":{"cmdline":"/sbin/getty 38400 tty2 ","comm":"getty","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3696","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3697":{"metadata":{"cmdline":"/sbin/getty 38400 tty3 ","comm":"getty","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3697","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3698":{"metadata":{"cmdline":"/sbin/getty 38400 tty4 ","comm":"getty","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3698","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3699":{"metadata":{"cmdline":"/sbin/getty 38400 tty5 ","comm":"getty","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3699","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3700":{"metadata":{"cmdline":"/sbin/getty 38400 tty6 ","comm":"getty","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3700","ppid":"1","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;3957":{"metadata":{"cmdline":"/usr/bin/docker -d -p /var/run/docker.pid --bridge=cbr0 --iptables=false --ip-masq=false ","comm":"docker","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"3957","ppid":"1","threads":"81","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4003":{"metadata":{"cmdline":"docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5000 -container-ip 10.244.1.2 -container-port 5000 ","comm":"exe","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4003","ppid":"3957","threads":"7","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4047":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"b6739293fc49b06ac153b433714719404ca8bab26cbcc828f3b4243a73d477aa","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4047","ppid":"3957","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4058":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"701dea29a0fd1db8f1a5526caff37402b2a21c5192ed6b503c6c2acd677d464c","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4058","ppid":"3957","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4117":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"7e40939e09cf98fe4bd37534b1df524748b5fe343f1dfc7ef50739240a5d68d0","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4117","ppid":"3957","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4206":{"metadata":{"cmdline":"/usr/local/bin/etcd -data-dir /var/etcd/data -listen-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001 -advertise-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001 -initial-cluster-token skydns-etcd ","comm":"etcd","docker_container_id":"ab67452562f53f3c7f87aede7c85fcbbbd8f6742b8a4420eacdb82cdce21d3ff","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4206","ppid":"3957","threads":"7","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4283":{"metadata":{"cmdline":"udevd --daemon ","comm":"udevd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4283","ppid":"351","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4306":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"c2c715a5aae76ca36c89e0a5165cd0eda02fe0369bd9f483efb06ea61acb63bb","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4306","ppid":"3957","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4353":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"d7b9132f0f60d0730ef1096d0bf345783dac7f25d66e739df2a6489d2db09724","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4353","ppid":"3957","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4558":{"metadata":{"cmdline":"/kube2sky -domain=cluster.local ","comm":"kube2sky","docker_container_id":"75c2e5391e7908c2ef91454113b6bd9908b85a0a96571d83c3d3c577401653c9","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4558","ppid":"3957","threads":"5","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4703":{"metadata":{"cmdline":"/skydns -machines=http://localhost:4001 -addr=0.0.0.0:53 -domain=cluster.local. ","comm":"skydns","docker_container_id":"8587f82486b44614b0584c1b2a92d4f52bb120dbe7966f389364fe9065db5f57","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4703","ppid":"3957","threads":"6","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4898":{"metadata":{"cmdline":"udevd --daemon ","comm":"udevd","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4898","ppid":"351","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;4921":{"metadata":{"cmdline":"/pause ","comm":"pause","docker_container_id":"8396e8bd1c18b129085b8dc6814d3ebb56a691168460ce2eeed99bde4159fae9","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"4921","ppid":"3957","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5":{"metadata":{"comm":"kworker/0:0H","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5048":{"metadata":{"cmdline":"/exechealthz -cmd=nslookup kubernetes.default.svc.cluster.local localhost \u003e/dev/null -port=8080 ","comm":"exechealthz","docker_container_id":"7ba98168910b6e05b0f0db5d27b44da88a8dd1dc1a6af089daf5b857baee4405","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5048","ppid":"3957","threads":"6","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5091":{"metadata":{"cmdline":"haproxy -f /proxy.conf ","comm":"haproxy","docker_container_id":"4e3456e40f2cf1b5b66f23f9c984d3b4425945e603ff9ebbe491cf1702e7cd10","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5091","ppid":"3957","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5219":{"metadata":{"cmdline":"/kube-ui ","comm":"kube-ui","docker_container_id":"3c222f70c37dece0e188042b7f6a5a23b4e6f8aedfdfbad11013cf41226d29e2","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5219","ppid":"3957","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;529":{"metadata":{"comm":"kpsmoused","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"529","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5631":{"metadata":{"cmdline":"/bin/sh -c /usr/sbin/google-fluentd \"$FLUENTD_ARGS\" ","comm":"sh","docker_container_id":"63bc32946ccdf7501d58ca845e19dc11f0503c4faefaa0b6918c6cfcdc9ae2c5","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5631","ppid":"3957","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5639":{"metadata":{"cmdline":"/opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd -q ","comm":"google-fluentd","docker_container_id":"63bc32946ccdf7501d58ca845e19dc11f0503c4faefaa0b6918c6cfcdc9ae2c5","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5639","ppid":"5631","threads":"2","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5645":{"metadata":{"cmdline":"/opt/google-fluentd/embedded/bin/ruby /usr/sbin/google-fluentd -q ","comm":"google-fluentd","docker_container_id":"63bc32946ccdf7501d58ca845e19dc11f0503c4faefaa0b6918c6cfcdc9ae2c5","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5645","ppid":"5639","threads":"14","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5837":{"metadata":{"cmdline":"/bin/sh -c /run.sh ","comm":"sh","docker_container_id":"94ce0467e3b4f90564391bfb2993f3d9be4fafbb38f9f81a75407ffe3b1b15ad","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5837","ppid":"3957","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5844":{"metadata":{"cmdline":"/bin/bash /run.sh ","comm":"run.sh","docker_container_id":"94ce0467e3b4f90564391bfb2993f3d9be4fafbb38f9f81a75407ffe3b1b15ad","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5844","ppid":"5837","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;5847":{"metadata":{"cmdline":"redis-server *:6379 ","comm":"redis-server","docker_container_id":"94ce0467e3b4f90564391bfb2993f3d9be4fafbb38f9f81a75407ffe3b1b15ad","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"5847","ppid":"5844","threads":"3","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;6460":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"c98bf13d16aba8a280514ea42d5b1b61759c0a9e0bddddb5ef5f00f4f38e24ed","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"6460","ppid":"3957","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;6468":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"c98bf13d16aba8a280514ea42d5b1b61759c0a9e0bddddb5ef5f00f4f38e24ed","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"6468","ppid":"6460","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;6469":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"c98bf13d16aba8a280514ea42d5b1b61759c0a9e0bddddb5ef5f00f4f38e24ed","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"6469","ppid":"6460","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;6470":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"c98bf13d16aba8a280514ea42d5b1b61759c0a9e0bddddb5ef5f00f4f38e24ed","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"6470","ppid":"6460","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;6471":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"c98bf13d16aba8a280514ea42d5b1b61759c0a9e0bddddb5ef5f00f4f38e24ed","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"6471","ppid":"6460","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;6472":{"metadata":{"cmdline":"apache2 -DFOREGROUND ","comm":"apache2","docker_container_id":"c98bf13d16aba8a280514ea42d5b1b61759c0a9e0bddddb5ef5f00f4f38e24ed","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"6472","ppid":"6460","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;7":{"metadata":{"comm":"rcu_sched","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"7","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;8":{"metadata":{"comm":"rcu_bh","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"8","ppid":"2","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;8703":{"metadata":{"cmdline":"/home/weave/runsvinit ","comm":"runsvinit","docker_container_id":"89dfc3ea421cb38ed6ae8797f80775aac6417d896b80bafed247bd8559f6a151","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"8703","ppid":"3957","threads":"4","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;8733":{"metadata":{"cmdline":"/sbin/runsvdir /etc/service ","comm":"runsvdir","docker_container_id":"89dfc3ea421cb38ed6ae8797f80775aac6417d896b80bafed247bd8559f6a151","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"8733","ppid":"8703","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;8827":{"metadata":{"cmdline":"runsv app ","comm":"runsv","docker_container_id":"89dfc3ea421cb38ed6ae8797f80775aac6417d896b80bafed247bd8559f6a151","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"8827","ppid":"8733","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;8828":{"metadata":{"cmdline":"runsv probe ","comm":"runsv","docker_container_id":"89dfc3ea421cb38ed6ae8797f80775aac6417d896b80bafed247bd8559f6a151","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"8828","ppid":"8733","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;8829":{"metadata":{"cmdline":"/home/weave/scope-probe -docker=true -docker.bridge=cbr0 kubernetes-master ","comm":"scope-probe","docker_container_id":"89dfc3ea421cb38ed6ae8797f80775aac6417d896b80bafed247bd8559f6a151","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"8829","ppid":"8828","threads":"8","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;8851":{"metadata":{"cmdline":"conntrack -E -o xml -p tcp --any-nat ","comm":"conntrack","docker_container_id":"89dfc3ea421cb38ed6ae8797f80775aac6417d896b80bafed247bd8559f6a151","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"8851","ppid":"8829","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;8858":{"metadata":{"cmdline":"conntrack -E -o xml -p tcp ","comm":"conntrack","docker_container_id":"89dfc3ea421cb38ed6ae8797f80775aac6417d896b80bafed247bd8559f6a151","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"8858","ppid":"8829","threads":"1","topology":"process"},"adjacency":[]},"kubernetes-minion-ynva;9":{"metadata":{"comm":"migration/0","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","pid":"9","ppid":"2","threads":"1","topology":"process"},"adjacency":[]}}},"Container":{"Nodes":{"kubernetes-master;0424119ab8935a0f81c0fd08d62d29c2245754195c0bc9347c299ea4ec58f0bc":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"524797950","cpu_usage_in_kernelmode":"50000000","cpu_usage_in_usermode":"440000000","docker_container_command":"/bin/sh -c /usr/local/bin/kube-scheduler --master=127.0.0.1:8080 --v=2 1\u003e\u003e/var/log/kube-scheduler.log 2\u003e\u00261","docker_container_created":"29 Sep 15 15:09 UTC","docker_container_id":"0424119ab8935a0f81c0fd08d62d29c2245754195c0bc9347c299ea4ec58f0bc","docker_container_ips":"","docker_container_name":"k8s_kube-scheduler.a94afde7_kube-scheduler-kubernetes-master_kube-system_4812200d2fa5ac2ccc874fd52bfd6263_3ca55c7b","docker_container_ports":"","docker_image_id":"0d744386904dbf2d150bd5bc90e061ebf53e9839be2cee15322600e946777720","docker_label_io.kubernetes.pod.name":"kube-system/kube-scheduler-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"5357568","memory_usage":"5230592","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;41128771f496341ec64179166a056d525bd677a5cc84c0ed9ce0db3cd833c60f":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"2841306893","cpu_usage_in_kernelmode":"660000000","cpu_usage_in_usermode":"1820000000","docker_container_command":"/bin/sh -c /usr/sbin/google-fluentd \"$FLUENTD_ARGS\"","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"41128771f496341ec64179166a056d525bd677a5cc84c0ed9ce0db3cd833c60f","docker_container_ips":"","docker_container_name":"k8s_fluentd-cloud-logging.d0f0479_fluentd-cloud-logging-kubernetes-master_kube-system_92a9b3b68ded48697d58b3409eaeba5b_f51d9379","docker_container_ports":"","docker_image_id":"6632215868fa61d64fc6c3c88cb81a98f8c420d2922a8d436b8ba63bde1de0f6","docker_label_io.kubernetes.pod.name":"kube-system/fluentd-cloud-logging-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"209715200","memory_max_usage":"72531968","memory_usage":"72409088","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;4463eef0d073e38af05affad5e17948f791f5fbd022e7b91c22250f12f49e9e5":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"20554703","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:09 UTC","docker_container_id":"4463eef0d073e38af05affad5e17948f791f5fbd022e7b91c22250f12f49e9e5","docker_container_ips":"","docker_container_name":"k8s_POD.7be6d81d_kube-apiserver-kubernetes-master_kube-system_8cba0b20b63646a20541436c3637f825_e7515e99","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/kube-apiserver-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1253376","memory_usage":"1130496","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;4f86be6687f5c57358a01470fba0365fb64237bf22cbcc5655cce1855a13a04e":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"11533397385","cpu_usage_in_kernelmode":"1200000000","cpu_usage_in_usermode":"9790000000","docker_container_command":"/bin/sh -c /usr/local/bin/kube-apiserver --address=127.0.0.1 --etcd-servers=http://127.0.0.1:4001 --cloud-provider=gce --admission-control=NamespaceLifecycle,LimitRanger,SecurityContextDeny,ServiceAccount,DenyEscalatingExec,ResourceQuota --service-cluster-ip-range=10.0.0.0/16 --client-ca-file=/srv/kubernetes/ca.crt --basic-auth-file=/srv/kubernetes/basic_auth.csv --cluster-name=kubernetes --tls-cert-file=/srv/kubernetes/server.cert --tls-private-key-file=/srv/kubernetes/server.key --secure-port=443 --token-auth-file=/srv/kubernetes/known_tokens.csv --v=2 --allow-privileged=False 1\u003e\u003e/var/log/kube-apiserver.log 2\u003e\u00261","docker_container_created":"29 Sep 15 15:09 UTC","docker_container_id":"4f86be6687f5c57358a01470fba0365fb64237bf22cbcc5655cce1855a13a04e","docker_container_ips":"","docker_container_name":"k8s_kube-apiserver.8ae1cf4_kube-apiserver-kubernetes-master_kube-system_8cba0b20b63646a20541436c3637f825_718f18e6","docker_container_ports":"","docker_image_id":"dfaea24a13fbbcc21713ac41261c41fbcb684544b73cc5c1aa491bdc6f650fc4","docker_label_io.kubernetes.pod.name":"kube-system/kube-apiserver-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"50466816","memory_usage":"50339840","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;7e2e832247d08146b42744612edca16118e83546e183a981bb8e4301e55e4162":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"25036337","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"20000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:09 UTC","docker_container_id":"7e2e832247d08146b42744612edca16118e83546e183a981bb8e4301e55e4162","docker_container_ips":"","docker_container_name":"k8s_POD.7be6d81d_kube-controller-manager-kubernetes-master_kube-system_750313738af13d0f1c3947fd435dd45f_acb93e18","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/kube-controller-manager-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2035712","memory_usage":"1126400","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;813d2b0ed0ab4bdc531bd24f2cba96c1e18c3ffbf9d69f579177320d9954dd8e":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"24468373","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"30000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:09 UTC","docker_container_id":"813d2b0ed0ab4bdc531bd24f2cba96c1e18c3ffbf9d69f579177320d9954dd8e","docker_container_ips":"","docker_container_name":"k8s_POD.7be6d81d_etcd-server-kubernetes-master_kube-system_58ee9ac309a8eb2195008a4ff869aeee_1ffd3b7c","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/etcd-server-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1945600","memory_usage":"1122304","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"40714266424","cpu_usage_in_kernelmode":"12830000000","cpu_usage_in_usermode":"28700000000","docker_container_command":"/home/weave/entrypoint.sh --probe.docker true --probe.docker.bridge cbr0 --probe.kubernetes true","docker_container_created":"29 Sep 15 15:12 UTC","docker_container_id":"877656be98aa38ceffec91e571f66a4b6d96066859fa3e1cbab47357313dabe7","docker_container_ips":"","docker_container_name":"weavescope","docker_container_ports":"","docker_image_id":"d47ce3dcfead875c0ae53f2f9da58f7ab64c6d904ce4576fc4aebc229606054c","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"65589248","memory_usage":"65462272","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;908699693a3f4a53810f76c203cbd53dbc894a4bebec0c35ffcbecdab34c6630":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"2416666189","cpu_usage_in_kernelmode":"480000000","cpu_usage_in_usermode":"1330000000","docker_container_command":"/bin/sh -c /usr/local/bin/etcd --addr 127.0.0.1:4001 --bind-addr 127.0.0.1:4001 --data-dir /var/etcd/data 1\u003e\u003e/var/log/etcd.log 2\u003e\u00261","docker_container_created":"29 Sep 15 15:09 UTC","docker_container_id":"908699693a3f4a53810f76c203cbd53dbc894a4bebec0c35ffcbecdab34c6630","docker_container_ips":"","docker_container_name":"k8s_etcd-container.a7235b2d_etcd-server-kubernetes-master_kube-system_58ee9ac309a8eb2195008a4ff869aeee_d550153f","docker_container_ports":"","docker_image_id":"fafe4735269937ef7ba1fa0badb66d7fd70736619862e3982144c59289fddb11","docker_label_io.kubernetes.pod.name":"kube-system/etcd-server-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"29859840","memory_usage":"29745152","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;9d0e57c1f80090d01bf2b9f711127ebf281a1801dab12e6f9ef74f240cd17351":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"22920186","cpu_usage_in_kernelmode":"10000000","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:09 UTC","docker_container_id":"9d0e57c1f80090d01bf2b9f711127ebf281a1801dab12e6f9ef74f240cd17351","docker_container_ips":"","docker_container_name":"k8s_POD.7be6d81d_kube-scheduler-kubernetes-master_kube-system_4812200d2fa5ac2ccc874fd52bfd6263_b382b43c","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/kube-scheduler-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1945600","memory_usage":"1130496","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;c1a7eebbce890527854b2f253881f931d9945628011694a409dee8f453e65cfd":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"3331376937","cpu_usage_in_kernelmode":"390000000","cpu_usage_in_usermode":"2660000000","docker_container_command":"/bin/sh -c /usr/local/bin/kube-controller-manager --master=127.0.0.1:8080 --cluster-name=kubernetes --cluster-cidr=10.244.0.0/16 --allocate-node-cidrs=true --enable-horizontal-pod-autoscaler=false --cloud-provider=gce --service-account-private-key-file=/srv/kubernetes/server.key --v=2 --root-ca-file=/srv/kubernetes/ca.crt 1\u003e\u003e/var/log/kube-controller-manager.log 2\u003e\u00261","docker_container_created":"29 Sep 15 15:09 UTC","docker_container_id":"c1a7eebbce890527854b2f253881f931d9945628011694a409dee8f453e65cfd","docker_container_ips":"","docker_container_name":"k8s_kube-controller-manager.75d164e4_kube-controller-manager-kubernetes-master_kube-system_750313738af13d0f1c3947fd435dd45f_64b346e4","docker_container_ports":"","docker_image_id":"0c4eef29291da17da82a5553888e57814d62d250c030fd7e97c49a3cdfabeb4a","docker_label_io.kubernetes.pod.name":"kube-system/kube-controller-manager-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"14983168","memory_usage":"14860288","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-master;f32e8d6a30e13254786e5e0f9c77dd90bdae9c6711b9bfd478f4e8c9daf73232":{"metadata":{"cpu_system_cpu_usage":"487830000000","cpu_total_usage":"24639709","cpu_usage_in_kernelmode":"10000000","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:09 UTC","docker_container_id":"f32e8d6a30e13254786e5e0f9c77dd90bdae9c6711b9bfd478f4e8c9daf73232","docker_container_ips":"10.246.0.2","docker_container_name":"k8s_POD.7be6d81d_fluentd-cloud-logging-kubernetes-master_kube-system_92a9b3b68ded48697d58b3409eaeba5b_3f46d592","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/fluentd-cloud-logging-kubernetes-master","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-master;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1196032","memory_usage":"1122304","network_rx_bytes":"126445","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"495","network_tx_bytes":"1678968","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"643","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;077fa66f18543d7f26a27e49a872f14cace6e69b866df69cce2d20da74da1f41":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"276848175","cpu_usage_in_kernelmode":"150000000","cpu_usage_in_usermode":"100000000","docker_container_command":"/entrypoint.sh redis-server","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"077fa66f18543d7f26a27e49a872f14cace6e69b866df69cce2d20da74da1f41","docker_container_ips":"","docker_container_name":"k8s_master.427c5231_redis-master-l31cq_default_4143064d-66bc-11e5-af05-42010af02716_a173a7bb","docker_container_ports":"","docker_image_id":"2f2578ff984f013c9a5d6cbb6fe061ed3f73a17380a4c9b53b76d4b8da3eda7d","docker_label_io.kubernetes.pod.name":"default/redis-master-l31cq","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2035712","memory_usage":"1097728","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;0aace0cadd4c247dea50cdd60a67777624aff2eb50836f889b5104595c4736d7":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"20891821","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"0aace0cadd4c247dea50cdd60a67777624aff2eb50836f889b5104595c4736d7","docker_container_ips":"10.244.0.3","docker_container_name":"k8s_POD.8d19fd44_kube-registry-proxy-kubernetes-minion-y1qq_kube-system_03a8c0c5ec9abd365284ab8c79464740_13fab3fc","docker_container_ports":"0.0.0.0:5000-\u003e5000/tcp","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/kube-registry-proxy-kubernetes-minion-y1qq","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1368064","memory_usage":"1318912","network_rx_bytes":"7324","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"74","network_tx_bytes":"2268","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"21","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;2dec0d75eeb06ab5bb68aab182c34593bc825ddbe456516e12bf5ad7dda6d1a3":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"27684018","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"20000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"2dec0d75eeb06ab5bb68aab182c34593bc825ddbe456516e12bf5ad7dda6d1a3","docker_container_ips":"10.244.0.9","docker_container_name":"k8s_POD.7be6d81d_heapster-v9-zfqt9_kube-system_293b58ba-66bc-11e5-af05-42010af02716_de22ae97","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/heapster-v9-zfqt9","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2174976","memory_usage":"1187840","network_rx_bytes":"1152450","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"821","network_tx_bytes":"136206","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"950","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;363980693d9aeae2f12b24f45fb99017a26122ecfe59cb1a1999a572f7b0ec61":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"24551434","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"20000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"363980693d9aeae2f12b24f45fb99017a26122ecfe59cb1a1999a572f7b0ec61","docker_container_ips":"10.244.0.2","docker_container_name":"k8s_POD.7be6d81d_fluentd-cloud-logging-kubernetes-minion-y1qq_kube-system_92a9b3b68ded48697d58b3409eaeba5b_1364e9b6","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/fluentd-cloud-logging-kubernetes-minion-y1qq","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2031616","memory_usage":"1294336","network_rx_bytes":"694275","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"2405","network_tx_bytes":"1230250","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"2503","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;47cc6211a1ef3633e9cd1edb7916bb6d1657a24282b63341cb00f1a4c32cbfa7":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"28649594","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"47cc6211a1ef3633e9cd1edb7916bb6d1657a24282b63341cb00f1a4c32cbfa7","docker_container_ips":"10.244.0.10","docker_container_name":"k8s_POD.89e0fcaf_kube-registry-v0-jnjom_kube-system_298d0529-66bc-11e5-af05-42010af02716_bbf9102c","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/kube-registry-v0-jnjom","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2093056","memory_usage":"1187840","network_rx_bytes":"782","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"13","network_tx_bytes":"648","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"8","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;4c4c854a9fdcf8291ebeb728deec991aebfc3170515dfc648f429a40825ecba5":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"46809936","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"20000000","docker_container_command":"/bin/registry /etc/docker/registry/config.yml","docker_container_created":"29 Sep 15 15:12 UTC","docker_container_id":"4c4c854a9fdcf8291ebeb728deec991aebfc3170515dfc648f429a40825ecba5","docker_container_ips":"","docker_container_name":"k8s_registry.a85150ea_kube-registry-v0-jnjom_kube-system_298d0529-66bc-11e5-af05-42010af02716_b933587a","docker_container_ports":"","docker_image_id":"1e847b14150e365a95d76a9cc6b71cd67ca89905e3a0400fa44381ecf00890e1","docker_label_io.kubernetes.pod.name":"kube-system/kube-registry-v0-jnjom","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"104857600","memory_max_usage":"2375680","memory_usage":"2248704","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;673420131e3333e324b88fe6ad6a9524b394f5b5a7bbf2db81346263ebb14bd9":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"12701911933","cpu_usage_in_kernelmode":"6680000000","cpu_usage_in_usermode":"6020000000","docker_container_command":"/home/weave/entrypoint.sh --probe.docker true --no-app --probe.docker.bridge cbr0 kubernetes-master","docker_container_created":"29 Sep 15 15:12 UTC","docker_container_id":"673420131e3333e324b88fe6ad6a9524b394f5b5a7bbf2db81346263ebb14bd9","docker_container_ips":"","docker_container_name":"weavescope","docker_container_ports":"","docker_image_id":"d47ce3dcfead875c0ae53f2f9da58f7ab64c6d904ce4576fc4aebc229606054c","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"18952192","memory_usage":"18825216","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;6bcacea7bac8cf8de045286cf780802cfb1a072b6f8bbe7aee9287a328a55db2":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"211343651","cpu_usage_in_kernelmode":"10000000","cpu_usage_in_usermode":"100000000","docker_container_command":"/usr/sbin/grafana-server --config /etc/grafana/grafana.ini cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana","docker_container_created":"29 Sep 15 15:12 UTC","docker_container_id":"6bcacea7bac8cf8de045286cf780802cfb1a072b6f8bbe7aee9287a328a55db2","docker_container_ips":"","docker_container_name":"k8s_grafana.46bc888_monitoring-influxdb-grafana-v2-xibkt_kube-system_2836fd00-66bc-11e5-af05-42010af02716_0af9f315","docker_container_ports":"","docker_image_id":"1adbf490a198ef89c6c2cf0511a1264a5a87bc9e43bc36eddf39cad5d0ad0730","docker_label_io.kubernetes.pod.name":"kube-system/monitoring-influxdb-grafana-v2-xibkt","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"104857600","memory_max_usage":"2781184","memory_usage":"2654208","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;774f6794e5855014f3120a145391cfa79410dc5eb848426f00fd7401cfa761cc":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"25479624","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"774f6794e5855014f3120a145391cfa79410dc5eb848426f00fd7401cfa761cc","docker_container_ips":"10.244.0.8","docker_container_name":"k8s_POD.c5371ceb_monitoring-influxdb-grafana-v2-xibkt_kube-system_2836fd00-66bc-11e5-af05-42010af02716_927b6bae","docker_container_ports":"0.0.0.0:8083-\u003e8083/tcp, 0.0.0.0:8086-\u003e8086/tcp","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/monitoring-influxdb-grafana-v2-xibkt","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2027520","memory_usage":"1196032","network_rx_bytes":"4954","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"48","network_tx_bytes":"2663","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"29","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;7ce5986d56104fe6ba4fb195ca20687ff1083c6209963edbc4a8671c677b41c3":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"3742377112","cpu_usage_in_kernelmode":"660000000","cpu_usage_in_usermode":"3020000000","docker_container_command":"/bin/sh -c /usr/sbin/google-fluentd \"$FLUENTD_ARGS\"","docker_container_created":"29 Sep 15 15:12 UTC","docker_container_id":"7ce5986d56104fe6ba4fb195ca20687ff1083c6209963edbc4a8671c677b41c3","docker_container_ips":"","docker_container_name":"k8s_fluentd-cloud-logging.d0f0479_fluentd-cloud-logging-kubernetes-minion-y1qq_kube-system_92a9b3b68ded48697d58b3409eaeba5b_f05d56da","docker_container_ports":"","docker_image_id":"6632215868fa61d64fc6c3c88cb81a98f8c420d2922a8d436b8ba63bde1de0f6","docker_label_io.kubernetes.pod.name":"kube-system/fluentd-cloud-logging-kubernetes-minion-y1qq","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"209715200","memory_max_usage":"77774848","memory_usage":"77643776","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;877f07b53b70df831654cf80c9b030894774d85fb2f6a09f41e7490a967f1a26":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"97821908","cpu_usage_in_kernelmode":"40000000","cpu_usage_in_usermode":"50000000","docker_container_command":"apache2-foreground ","docker_container_created":"29 Sep 15 15:12 UTC","docker_container_id":"877f07b53b70df831654cf80c9b030894774d85fb2f6a09f41e7490a967f1a26","docker_container_ips":"","docker_container_name":"k8s_php-redis.8ccc7a1e_frontend-nhaxi_default_41295d3f-66bc-11e5-af05-42010af02716_5ad3e644","docker_container_ports":"","docker_image_id":"ef8dcaba5c0f0789ce47dcf9913be5169a57a9a32cf7a4c1cc801f2ee3507ebb","docker_label_io.kubernetes.pod.name":"default/frontend-nhaxi","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"6238208","memory_usage":"6164480","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;8d4b7e717583ecd1933b959407075f511a0d806f39cdebf308e7ae57d2b9cdcb":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"10542654","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"8d4b7e717583ecd1933b959407075f511a0d806f39cdebf308e7ae57d2b9cdcb","docker_container_ips":"10.244.0.4","docker_container_name":"k8s_POD.3ef3f8d9_frontend-nhaxi_default_41295d3f-66bc-11e5-af05-42010af02716_c40c5b4f","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"default/frontend-nhaxi","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1191936","memory_usage":"1142784","network_rx_bytes":"3918","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"51","network_tx_bytes":"258","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"3","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;8dadee0a334a3a3ca015f9ab07511a0a6adadc5f65ca7dca741ff5035c2df30a":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"23514906","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"20000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"8dadee0a334a3a3ca015f9ab07511a0a6adadc5f65ca7dca741ff5035c2df30a","docker_container_ips":"10.244.0.5","docker_container_name":"k8s_POD.3ef3f8d9_frontend-iftno_default_41293cdb-66bc-11e5-af05-42010af02716_e05a4ffc","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"default/frontend-iftno","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2048000","memory_usage":"1134592","network_rx_bytes":"3750","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"49","network_tx_bytes":"648","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"8","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;a09552aebd3e8c7f2c69d15f2cdff477cb39990826e539ac93e813b2f8875ddc":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"168958280","cpu_usage_in_kernelmode":"20000000","cpu_usage_in_usermode":"80000000","docker_container_command":"influxdb --config /config/config.toml","docker_container_created":"29 Sep 15 15:12 UTC","docker_container_id":"a09552aebd3e8c7f2c69d15f2cdff477cb39990826e539ac93e813b2f8875ddc","docker_container_ips":"","docker_container_name":"k8s_influxdb.897939cd_monitoring-influxdb-grafana-v2-xibkt_kube-system_2836fd00-66bc-11e5-af05-42010af02716_db07b702","docker_container_ports":"","docker_image_id":"8b8118c488e431cc43e7ff9060968d88402cc6c38a6390c4221352403aa7ac1b","docker_label_io.kubernetes.pod.name":"kube-system/monitoring-influxdb-grafana-v2-xibkt","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"209715200","memory_max_usage":"2433024","memory_usage":"2306048","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;a4ddbb92b4c38637e838741594e541f5d1365e0d84ab74dcd259ee5e892907e1":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"96285737","cpu_usage_in_kernelmode":"40000000","cpu_usage_in_usermode":"40000000","docker_container_command":"apache2-foreground ","docker_container_created":"29 Sep 15 15:12 UTC","docker_container_id":"a4ddbb92b4c38637e838741594e541f5d1365e0d84ab74dcd259ee5e892907e1","docker_container_ips":"","docker_container_name":"k8s_php-redis.8ccc7a1e_frontend-iftno_default_41293cdb-66bc-11e5-af05-42010af02716_404c4c84","docker_container_ports":"","docker_image_id":"ef8dcaba5c0f0789ce47dcf9913be5169a57a9a32cf7a4c1cc801f2ee3507ebb","docker_label_io.kubernetes.pod.name":"default/frontend-iftno","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"6172672","memory_usage":"6168576","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;bd3c091dbc0d8fdd9a3fa51ccf88e28800a3e3473093f3083bd0de70ffb4caee":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"9967072","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"0","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"bd3c091dbc0d8fdd9a3fa51ccf88e28800a3e3473093f3083bd0de70ffb4caee","docker_container_ips":"10.244.0.6","docker_container_name":"k8s_POD.adf8f94a_redis-master-l31cq_default_4143064d-66bc-11e5-af05-42010af02716_9cc9e3ea","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"default/redis-master-l31cq","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1191936","memory_usage":"1163264","network_rx_bytes":"63805","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"662","network_tx_bytes":"41779","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"618","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;d6083be9dcb81523e1096c22fb687ac6a5b26ab56ba54afe7ecd40834696778b":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"39760088","cpu_usage_in_kernelmode":"20000000","cpu_usage_in_usermode":"10000000","docker_container_command":"/usr/bin/run_proxy ","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"d6083be9dcb81523e1096c22fb687ac6a5b26ab56ba54afe7ecd40834696778b","docker_container_ips":"","docker_container_name":"k8s_kube-registry-proxy.16a3352e_kube-registry-proxy-kubernetes-minion-y1qq_kube-system_03a8c0c5ec9abd365284ab8c79464740_077ee5aa","docker_container_ports":"","docker_image_id":"9b9342c134bbda6f57c95c52cafd4ae40333dd6cc0fce4bace9296f957042d22","docker_label_io.kubernetes.pod.name":"kube-system/kube-registry-proxy-kubernetes-minion-y1qq","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"52428800","memory_max_usage":"2088960","memory_usage":"815104","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;dd02582c005bf93bcdf0a44f1a284696b156ea3689a619a4df2fcc954ca28779":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"19841800","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"dd02582c005bf93bcdf0a44f1a284696b156ea3689a619a4df2fcc954ca28779","docker_container_ips":"10.244.0.7","docker_container_name":"k8s_POD.adf8f94a_redis-slave-gsphx_default_4156be5d-66bc-11e5-af05-42010af02716_89f5f478","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"default/redis-slave-gsphx","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1191936","memory_usage":"1159168","network_rx_bytes":"23861","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"346","network_tx_bytes":"30158","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"310","topology":"container"},"adjacency":[]},"kubernetes-minion-y1qq;ff5d05e745bfa9b137796a1503257fcf13780dc51df19a62de6715da2aef95f3":{"metadata":{"cpu_system_cpu_usage":"438250000000","cpu_total_usage":"240829452","cpu_usage_in_kernelmode":"110000000","cpu_usage_in_usermode":"50000000","docker_container_command":"/entrypoint.sh /bin/sh -c /run.sh","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"ff5d05e745bfa9b137796a1503257fcf13780dc51df19a62de6715da2aef95f3","docker_container_ips":"","docker_container_name":"k8s_worker.61f7a6d_redis-slave-gsphx_default_4156be5d-66bc-11e5-af05-42010af02716_1bf5c8e3","docker_container_ports":"","docker_image_id":"f94ba9414e196599263898609a857a414fb9c7f201b3f8adc2599c15118ff048","docker_label_io.kubernetes.pod.name":"default/redis-slave-gsphx","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2068480","memory_usage":"1474560","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;3c222f70c37dece0e188042b7f6a5a23b4e6f8aedfdfbad11013cf41226d29e2":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"28176438","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"10000000","docker_container_command":"/kube-ui ","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"3c222f70c37dece0e188042b7f6a5a23b4e6f8aedfdfbad11013cf41226d29e2","docker_container_ips":"","docker_container_name":"k8s_kube-ui.fa9e5971_kube-ui-v2-aymmx_kube-system_28edf203-66bc-11e5-af05-42010af02716_8920856d","docker_container_ports":"","docker_image_id":"6286e698abf418689780df1d948f464e3eb990e5bf340af3a4e1b5f7a3211f54","docker_label_io.kubernetes.pod.name":"kube-system/kube-ui-v2-aymmx","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"52428800","memory_max_usage":"2088960","memory_usage":"880640","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;4e3456e40f2cf1b5b66f23f9c984d3b4425945e603ff9ebbe491cf1702e7cd10":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"38968326","cpu_usage_in_kernelmode":"10000000","cpu_usage_in_usermode":"20000000","docker_container_command":"/usr/bin/run_proxy ","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"4e3456e40f2cf1b5b66f23f9c984d3b4425945e603ff9ebbe491cf1702e7cd10","docker_container_ips":"","docker_container_name":"k8s_kube-registry-proxy.16a3352e_kube-registry-proxy-kubernetes-minion-ynva_kube-system_03a8c0c5ec9abd365284ab8c79464740_f0e932bb","docker_container_ports":"","docker_image_id":"9b9342c134bbda6f57c95c52cafd4ae40333dd6cc0fce4bace9296f957042d22","docker_label_io.kubernetes.pod.name":"kube-system/kube-registry-proxy-kubernetes-minion-ynva","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"52428800","memory_max_usage":"2076672","memory_usage":"806912","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;63bc32946ccdf7501d58ca845e19dc11f0503c4faefaa0b6918c6cfcdc9ae2c5":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"4453239705","cpu_usage_in_kernelmode":"600000000","cpu_usage_in_usermode":"3730000000","docker_container_command":"/bin/sh -c /usr/sbin/google-fluentd \"$FLUENTD_ARGS\"","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"63bc32946ccdf7501d58ca845e19dc11f0503c4faefaa0b6918c6cfcdc9ae2c5","docker_container_ips":"","docker_container_name":"k8s_fluentd-cloud-logging.d0f0479_fluentd-cloud-logging-kubernetes-minion-ynva_kube-system_92a9b3b68ded48697d58b3409eaeba5b_ac18eb3e","docker_container_ports":"","docker_image_id":"6632215868fa61d64fc6c3c88cb81a98f8c420d2922a8d436b8ba63bde1de0f6","docker_label_io.kubernetes.pod.name":"kube-system/fluentd-cloud-logging-kubernetes-minion-ynva","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"209715200","memory_max_usage":"78336000","memory_usage":"78143488","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;701dea29a0fd1db8f1a5526caff37402b2a21c5192ed6b503c6c2acd677d464c":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"22662975","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"701dea29a0fd1db8f1a5526caff37402b2a21c5192ed6b503c6c2acd677d464c","docker_container_ips":"10.244.1.2","docker_container_name":"k8s_POD.8d19fd44_kube-registry-proxy-kubernetes-minion-ynva_kube-system_03a8c0c5ec9abd365284ab8c79464740_fa89dfa0","docker_container_ports":"0.0.0.0:5000-\u003e5000/tcp","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/kube-registry-proxy-kubernetes-minion-ynva","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2109440","memory_usage":"1187840","network_rx_bytes":"5338","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"49","network_tx_bytes":"2268","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"21","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;75c2e5391e7908c2ef91454113b6bd9908b85a0a96571d83c3d3c577401653c9":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"221327191","cpu_usage_in_kernelmode":"20000000","cpu_usage_in_usermode":"160000000","docker_container_command":"/kube2sky -domain=cluster.local","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"75c2e5391e7908c2ef91454113b6bd9908b85a0a96571d83c3d3c577401653c9","docker_container_ips":"","docker_container_name":"k8s_kube2sky.3d1bd67b_kube-dns-v9-3x4gf_kube-system_298e86fc-66bc-11e5-af05-42010af02716_e46aab87","docker_container_ports":"","docker_image_id":"e52a547dca17cd83e8b6022e8ae1c1883d0855bce2d1c30071ffa0dcb8a8caf6","docker_label_io.kubernetes.pod.name":"kube-system/kube-dns-v9-3x4gf","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"52428800","memory_max_usage":"3358720","memory_usage":"3231744","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;7ba98168910b6e05b0f0db5d27b44da88a8dd1dc1a6af089daf5b857baee4405":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"243482346","cpu_usage_in_kernelmode":"330000000","cpu_usage_in_usermode":"150000000","docker_container_command":"/exechealthz -cmd=nslookup kubernetes.default.svc.cluster.local localhost \u003e/dev/null -port=8080","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"7ba98168910b6e05b0f0db5d27b44da88a8dd1dc1a6af089daf5b857baee4405","docker_container_ips":"","docker_container_name":"k8s_healthz.13d70e97_kube-dns-v9-3x4gf_kube-system_298e86fc-66bc-11e5-af05-42010af02716_99502f6c","docker_container_ports":"","docker_image_id":"4f3d04b1d47b64834d494f9416d1f17a5f93a3e2035ad604fee47cfbba62be60","docker_label_io.kubernetes.pod.name":"kube-system/kube-dns-v9-3x4gf","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"20971520","memory_max_usage":"2068480","memory_usage":"843776","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;7e40939e09cf98fe4bd37534b1df524748b5fe343f1dfc7ef50739240a5d68d0":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"22074939","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"20000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"7e40939e09cf98fe4bd37534b1df524748b5fe343f1dfc7ef50739240a5d68d0","docker_container_ips":"10.244.1.4","docker_container_name":"k8s_POD.6e934112_kube-dns-v9-3x4gf_kube-system_298e86fc-66bc-11e5-af05-42010af02716_67dbb2c3","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/kube-dns-v9-3x4gf","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1282048","memory_usage":"1183744","network_rx_bytes":"1097665","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"6602","network_tx_bytes":"889329","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"6530","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;8396e8bd1c18b129085b8dc6814d3ebb56a691168460ce2eeed99bde4159fae9":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"21136918","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"20000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"8396e8bd1c18b129085b8dc6814d3ebb56a691168460ce2eeed99bde4159fae9","docker_container_ips":"10.244.1.7","docker_container_name":"k8s_POD.9db2f941_kube-ui-v2-aymmx_kube-system_28edf203-66bc-11e5-af05-42010af02716_ce886bb5","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/kube-ui-v2-aymmx","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1196032","memory_usage":"1191936","network_rx_bytes":"6923","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"66","network_tx_bytes":"77390","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"39","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;8587f82486b44614b0584c1b2a92d4f52bb120dbe7966f389364fe9065db5f57":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"1101823061","cpu_usage_in_kernelmode":"420000000","cpu_usage_in_usermode":"740000000","docker_container_command":"/skydns -machines=http://localhost:4001 -addr=0.0.0.0:53 -domain=cluster.local.","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"8587f82486b44614b0584c1b2a92d4f52bb120dbe7966f389364fe9065db5f57","docker_container_ips":"","docker_container_name":"k8s_skydns.b3c506b1_kube-dns-v9-3x4gf_kube-system_298e86fc-66bc-11e5-af05-42010af02716_52d346a3","docker_container_ports":"","docker_image_id":"791ddf327076e0fd35a1125568a56c05ee1f1dfd7a165c74f4d489d8a5e65ac5","docker_label_io.kubernetes.pod.name":"kube-system/kube-dns-v9-3x4gf","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"52428800","memory_max_usage":"2322432","memory_usage":"2195456","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;89dfc3ea421cb38ed6ae8797f80775aac6417d896b80bafed247bd8559f6a151":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"9230447043","cpu_usage_in_kernelmode":"4470000000","cpu_usage_in_usermode":"4590000000","docker_container_command":"/home/weave/entrypoint.sh --probe.docker true --no-app --probe.docker.bridge cbr0 kubernetes-master","docker_container_created":"29 Sep 15 15:13 UTC","docker_container_id":"89dfc3ea421cb38ed6ae8797f80775aac6417d896b80bafed247bd8559f6a151","docker_container_ips":"","docker_container_name":"weavescope","docker_container_ports":"","docker_image_id":"d47ce3dcfead875c0ae53f2f9da58f7ab64c6d904ce4576fc4aebc229606054c","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"15839232","memory_usage":"15716352","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;94ce0467e3b4f90564391bfb2993f3d9be4fafbb38f9f81a75407ffe3b1b15ad":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"235929339","cpu_usage_in_kernelmode":"80000000","cpu_usage_in_usermode":"70000000","docker_container_command":"/entrypoint.sh /bin/sh -c /run.sh","docker_container_created":"29 Sep 15 15:11 UTC","docker_container_id":"94ce0467e3b4f90564391bfb2993f3d9be4fafbb38f9f81a75407ffe3b1b15ad","docker_container_ips":"","docker_container_name":"k8s_worker.61f7a6d_redis-slave-pbvy2_default_4156f60c-66bc-11e5-af05-42010af02716_000da51e","docker_container_ports":"","docker_image_id":"f94ba9414e196599263898609a857a414fb9c7f201b3f8adc2599c15118ff048","docker_label_io.kubernetes.pod.name":"default/redis-slave-pbvy2","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2084864","memory_usage":"1474560","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;ab67452562f53f3c7f87aede7c85fcbbbd8f6742b8a4420eacdb82cdce21d3ff":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"637712744","cpu_usage_in_kernelmode":"40000000","cpu_usage_in_usermode":"140000000","docker_container_command":"/usr/local/bin/etcd -data-dir /var/etcd/data -listen-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001 -advertise-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001 -initial-cluster-token skydns-etcd","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"ab67452562f53f3c7f87aede7c85fcbbbd8f6742b8a4420eacdb82cdce21d3ff","docker_container_ips":"","docker_container_name":"k8s_etcd.90c62b42_kube-dns-v9-3x4gf_kube-system_298e86fc-66bc-11e5-af05-42010af02716_56b48bd5","docker_container_ports":"","docker_image_id":"b6b9a86dc06aa1361357ca1b105feba961f6a4145adca6c54e142c0be0fe87b0","docker_label_io.kubernetes.pod.name":"kube-system/kube-dns-v9-3x4gf","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"52428800","memory_max_usage":"2039808","memory_usage":"1650688","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;b6739293fc49b06ac153b433714719404ca8bab26cbcc828f3b4243a73d477aa":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"22363932","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"20000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"b6739293fc49b06ac153b433714719404ca8bab26cbcc828f3b4243a73d477aa","docker_container_ips":"10.244.1.3","docker_container_name":"k8s_POD.7be6d81d_fluentd-cloud-logging-kubernetes-minion-ynva_kube-system_92a9b3b68ded48697d58b3409eaeba5b_83b498cd","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"kube-system/fluentd-cloud-logging-kubernetes-minion-ynva","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"2043904","memory_usage":"1425408","network_rx_bytes":"1225495","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"4380","network_tx_bytes":"1416332","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"4602","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;c2c715a5aae76ca36c89e0a5165cd0eda02fe0369bd9f483efb06ea61acb63bb":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"22404512","cpu_usage_in_kernelmode":"10000000","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"c2c715a5aae76ca36c89e0a5165cd0eda02fe0369bd9f483efb06ea61acb63bb","docker_container_ips":"10.244.1.5","docker_container_name":"k8s_POD.3ef3f8d9_frontend-71r59_default_41294f09-66bc-11e5-af05-42010af02716_900c2e5c","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"default/frontend-71r59","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1880064","memory_usage":"1150976","network_rx_bytes":"1596","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"22","network_tx_bytes":"648","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"8","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;c98bf13d16aba8a280514ea42d5b1b61759c0a9e0bddddb5ef5f00f4f38e24ed":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"79317091","cpu_usage_in_kernelmode":"30000000","cpu_usage_in_usermode":"40000000","docker_container_command":"apache2-foreground ","docker_container_created":"29 Sep 15 15:12 UTC","docker_container_id":"c98bf13d16aba8a280514ea42d5b1b61759c0a9e0bddddb5ef5f00f4f38e24ed","docker_container_ips":"","docker_container_name":"k8s_php-redis.8ccc7a1e_frontend-71r59_default_41294f09-66bc-11e5-af05-42010af02716_119c9725","docker_container_ports":"","docker_image_id":"ef8dcaba5c0f0789ce47dcf9913be5169a57a9a32cf7a4c1cc801f2ee3507ebb","docker_label_io.kubernetes.pod.name":"default/frontend-71r59","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"6250496","memory_usage":"6156288","network_rx_bytes":"0","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"0","network_tx_bytes":"0","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"0","topology":"container"},"adjacency":[]},"kubernetes-minion-ynva;d7b9132f0f60d0730ef1096d0bf345783dac7f25d66e739df2a6489d2db09724":{"metadata":{"cpu_system_cpu_usage":"442040000000","cpu_total_usage":"20506098","cpu_usage_in_kernelmode":"0","cpu_usage_in_usermode":"10000000","docker_container_command":"/pause ","docker_container_created":"29 Sep 15 15:10 UTC","docker_container_id":"d7b9132f0f60d0730ef1096d0bf345783dac7f25d66e739df2a6489d2db09724","docker_container_ips":"10.244.1.6","docker_container_name":"k8s_POD.adf8f94a_redis-slave-pbvy2_default_4156f60c-66bc-11e5-af05-42010af02716_c3519b84","docker_container_ports":"","docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_label_io.kubernetes.pod.name":"default/redis-slave-pbvy2","docker_label_io.kubernetes.pod.terminationGracePeriod":"30","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","memory_failcnt":"0","memory_limit":"3892027392","memory_max_usage":"1961984","memory_usage":"1159168","network_rx_bytes":"23078","network_rx_dropped":"0","network_rx_errors":"0","network_rx_packets":"339","network_tx_bytes":"31549","network_tx_dropped":"0","network_tx_errors":"0","network_tx_packets":"323","topology":"container"},"adjacency":[]}}},"Pod":{"Nodes":{"default;default/frontend-71r59":{"metadata":{"kubernetes_namespace":"default","kubernetes_pod_container_ids":"c98bf13d16aba8a280514ea42d5b1b61759c0a9e0bddddb5ef5f00f4f38e24ed","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"default/frontend-71r59","kubernetes_pod_name":"frontend-71r59","kubernetes_service_ids":"default/frontend default/kubernetes"},"adjacency":[]},"default;default/frontend-iftno":{"metadata":{"kubernetes_namespace":"default","kubernetes_pod_container_ids":"a4ddbb92b4c38637e838741594e541f5d1365e0d84ab74dcd259ee5e892907e1","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"default/frontend-iftno","kubernetes_pod_name":"frontend-iftno","kubernetes_service_ids":"default/frontend default/kubernetes"},"adjacency":[]},"default;default/frontend-nhaxi":{"metadata":{"kubernetes_namespace":"default","kubernetes_pod_container_ids":"877f07b53b70df831654cf80c9b030894774d85fb2f6a09f41e7490a967f1a26","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"default/frontend-nhaxi","kubernetes_pod_name":"frontend-nhaxi","kubernetes_service_ids":"default/frontend default/kubernetes"},"adjacency":[]},"default;default/redis-master-l31cq":{"metadata":{"kubernetes_namespace":"default","kubernetes_pod_container_ids":"077fa66f18543d7f26a27e49a872f14cace6e69b866df69cce2d20da74da1f41","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"default/redis-master-l31cq","kubernetes_pod_name":"redis-master-l31cq","kubernetes_service_ids":"default/redis-master default/kubernetes"},"adjacency":[]},"default;default/redis-slave-gsphx":{"metadata":{"kubernetes_namespace":"default","kubernetes_pod_container_ids":"ff5d05e745bfa9b137796a1503257fcf13780dc51df19a62de6715da2aef95f3","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"default/redis-slave-gsphx","kubernetes_pod_name":"redis-slave-gsphx","kubernetes_service_ids":"default/kubernetes default/redis-slave"},"adjacency":[]},"default;default/redis-slave-pbvy2":{"metadata":{"kubernetes_namespace":"default","kubernetes_pod_container_ids":"94ce0467e3b4f90564391bfb2993f3d9be4fafbb38f9f81a75407ffe3b1b15ad","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"default/redis-slave-pbvy2","kubernetes_pod_name":"redis-slave-pbvy2","kubernetes_service_ids":"default/kubernetes default/redis-slave"},"adjacency":[]},"kube-system;kube-system/fluentd-cloud-logging-kubernetes-minion-y1qq":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_pod_container_ids":"7ce5986d56104fe6ba4fb195ca20687ff1083c6209963edbc4a8671c677b41c3","kubernetes_pod_created":"29 Sep 15 15:12 UTC","kubernetes_pod_id":"kube-system/fluentd-cloud-logging-kubernetes-minion-y1qq","kubernetes_pod_name":"fluentd-cloud-logging-kubernetes-minion-y1qq","kubernetes_service_ids":"default/kubernetes"},"adjacency":[]},"kube-system;kube-system/fluentd-cloud-logging-kubernetes-minion-ynva":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_pod_container_ids":"63bc32946ccdf7501d58ca845e19dc11f0503c4faefaa0b6918c6cfcdc9ae2c5","kubernetes_pod_created":"29 Sep 15 15:11 UTC","kubernetes_pod_id":"kube-system/fluentd-cloud-logging-kubernetes-minion-ynva","kubernetes_pod_name":"fluentd-cloud-logging-kubernetes-minion-ynva","kubernetes_service_ids":"default/kubernetes"},"adjacency":[]},"kube-system;kube-system/heapster-v9-zfqt9":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_pod_container_ids":"7489058fc89dd0f9cd27038fb3f18c142543ae06d2110815497428a9f547fd9d","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"kube-system/heapster-v9-zfqt9","kubernetes_pod_name":"heapster-v9-zfqt9","kubernetes_service_ids":"kube-system/heapster default/kubernetes"},"adjacency":[]},"kube-system;kube-system/kube-dns-v9-3x4gf":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_pod_container_ids":"ab67452562f53f3c7f87aede7c85fcbbbd8f6742b8a4420eacdb82cdce21d3ff 7ba98168910b6e05b0f0db5d27b44da88a8dd1dc1a6af089daf5b857baee4405 75c2e5391e7908c2ef91454113b6bd9908b85a0a96571d83c3d3c577401653c9 8587f82486b44614b0584c1b2a92d4f52bb120dbe7966f389364fe9065db5f57","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"kube-system/kube-dns-v9-3x4gf","kubernetes_pod_name":"kube-dns-v9-3x4gf","kubernetes_service_ids":"default/kubernetes kube-system/kube-dns"},"adjacency":[]},"kube-system;kube-system/kube-registry-proxy-kubernetes-minion-y1qq":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_pod_container_ids":"d6083be9dcb81523e1096c22fb687ac6a5b26ab56ba54afe7ecd40834696778b","kubernetes_pod_created":"29 Sep 15 15:11 UTC","kubernetes_pod_id":"kube-system/kube-registry-proxy-kubernetes-minion-y1qq","kubernetes_pod_name":"kube-registry-proxy-kubernetes-minion-y1qq","kubernetes_service_ids":"default/kubernetes"},"adjacency":[]},"kube-system;kube-system/kube-registry-proxy-kubernetes-minion-ynva":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_pod_container_ids":"4e3456e40f2cf1b5b66f23f9c984d3b4425945e603ff9ebbe491cf1702e7cd10","kubernetes_pod_created":"29 Sep 15 15:11 UTC","kubernetes_pod_id":"kube-system/kube-registry-proxy-kubernetes-minion-ynva","kubernetes_pod_name":"kube-registry-proxy-kubernetes-minion-ynva","kubernetes_service_ids":"default/kubernetes"},"adjacency":[]},"kube-system;kube-system/kube-registry-v0-jnjom":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_pod_container_ids":"4c4c854a9fdcf8291ebeb728deec991aebfc3170515dfc648f429a40825ecba5","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"kube-system/kube-registry-v0-jnjom","kubernetes_pod_name":"kube-registry-v0-jnjom","kubernetes_service_ids":"default/kubernetes kube-system/kube-registry"},"adjacency":[]},"kube-system;kube-system/kube-ui-v2-aymmx":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_pod_container_ids":"3c222f70c37dece0e188042b7f6a5a23b4e6f8aedfdfbad11013cf41226d29e2","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"kube-system/kube-ui-v2-aymmx","kubernetes_pod_name":"kube-ui-v2-aymmx","kubernetes_service_ids":"kube-system/kube-ui default/kubernetes"},"adjacency":[]},"kube-system;kube-system/monitoring-influxdb-grafana-v2-xibkt":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_pod_container_ids":"6bcacea7bac8cf8de045286cf780802cfb1a072b6f8bbe7aee9287a328a55db2 a09552aebd3e8c7f2c69d15f2cdff477cb39990826e539ac93e813b2f8875ddc","kubernetes_pod_created":"29 Sep 15 15:10 UTC","kubernetes_pod_id":"kube-system/monitoring-influxdb-grafana-v2-xibkt","kubernetes_pod_name":"monitoring-influxdb-grafana-v2-xibkt","kubernetes_service_ids":"kube-system/monitoring-grafana default/kubernetes kube-system/monitoring-influxdb"},"adjacency":[]}}},"Service":{"Nodes":{"default;default/frontend":{"metadata":{"kubernetes_namespace":"default","kubernetes_service_created":"29 Sep 15 15:10 UTC","kubernetes_service_id":"default/frontend","kubernetes_service_ips":"10.0.198.92 104.155.83.186","kubernetes_service_name":"frontend","kubernetes_service_ports":"80/TCP-\u003e80"},"adjacency":[]},"default;default/kubernetes":{"metadata":{"kubernetes_namespace":"default","kubernetes_service_created":"29 Sep 15 15:09 UTC","kubernetes_service_id":"default/kubernetes","kubernetes_service_ips":"10.0.0.1","kubernetes_service_name":"kubernetes","kubernetes_service_ports":"443/TCP-\u003e443"},"adjacency":[]},"default;default/redis-master":{"metadata":{"kubernetes_namespace":"default","kubernetes_service_created":"29 Sep 15 15:10 UTC","kubernetes_service_id":"default/redis-master","kubernetes_service_ips":"10.0.118.122","kubernetes_service_name":"redis-master","kubernetes_service_ports":"6379/TCP-\u003e6379"},"adjacency":[]},"default;default/redis-slave":{"metadata":{"kubernetes_namespace":"default","kubernetes_service_created":"29 Sep 15 15:10 UTC","kubernetes_service_id":"default/redis-slave","kubernetes_service_ips":"10.0.11.37","kubernetes_service_name":"redis-slave","kubernetes_service_ports":"6379/TCP-\u003e6379"},"adjacency":[]},"kube-system;kube-system/heapster":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_service_created":"29 Sep 15 15:10 UTC","kubernetes_service_id":"kube-system/heapster","kubernetes_service_ips":"10.0.143.62","kubernetes_service_name":"heapster","kubernetes_service_ports":"80/TCP-\u003e8082"},"adjacency":[]},"kube-system;kube-system/kube-dns":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_service_created":"29 Sep 15 15:10 UTC","kubernetes_service_id":"kube-system/kube-dns","kubernetes_service_ips":"10.0.0.10","kubernetes_service_name":"kube-dns","kubernetes_service_ports":"53/UDP-\u003e53 53/TCP-\u003e53"},"adjacency":[]},"kube-system;kube-system/kube-registry":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_service_created":"29 Sep 15 15:10 UTC","kubernetes_service_id":"kube-system/kube-registry","kubernetes_service_ips":"10.0.100.2","kubernetes_service_name":"kube-registry","kubernetes_service_ports":"5000/TCP-\u003e5000"},"adjacency":[]},"kube-system;kube-system/kube-ui":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_service_created":"29 Sep 15 15:10 UTC","kubernetes_service_id":"kube-system/kube-ui","kubernetes_service_ips":"10.0.127.218","kubernetes_service_name":"kube-ui","kubernetes_service_ports":"80/TCP-\u003e8080"},"adjacency":[]},"kube-system;kube-system/monitoring-grafana":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_service_created":"29 Sep 15 15:10 UTC","kubernetes_service_id":"kube-system/monitoring-grafana","kubernetes_service_ips":"10.0.8.84 104.155.94.68","kubernetes_service_name":"monitoring-grafana","kubernetes_service_ports":"80/TCP-\u003e3000"},"adjacency":[]},"kube-system;kube-system/monitoring-influxdb":{"metadata":{"kubernetes_namespace":"kube-system","kubernetes_service_created":"29 Sep 15 15:10 UTC","kubernetes_service_id":"kube-system/monitoring-influxdb","kubernetes_service_ips":"10.0.140.6","kubernetes_service_name":"monitoring-influxdb","kubernetes_service_ports":"8083/TCP-\u003e8083 8086/TCP-\u003e8086"},"adjacency":[]}}},"ContainerImage":{"Nodes":{"kubernetes-master;0c4eef29291da17da82a5553888e57814d62d250c030fd7e97c49a3cdfabeb4a":{"metadata":{"docker_image_id":"0c4eef29291da17da82a5553888e57814d62d250c030fd7e97c49a3cdfabeb4a","docker_image_name":"gcr.io/google_containers/kube-controller-manager:074512aeccbbfad43ce4c7dee79b96a3","host_node_id":"kubernetes-master;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-master;0d744386904dbf2d150bd5bc90e061ebf53e9839be2cee15322600e946777720":{"metadata":{"docker_image_id":"0d744386904dbf2d150bd5bc90e061ebf53e9839be2cee15322600e946777720","docker_image_name":"gcr.io/google_containers/kube-scheduler:6f47c49e375f3b046b82bb57d7feec32","host_node_id":"kubernetes-master;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-master;2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1":{"metadata":{"docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_image_name":"gcr.io/google_containers/pause:0.8.0","host_node_id":"kubernetes-master;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-master;6632215868fa61d64fc6c3c88cb81a98f8c420d2922a8d436b8ba63bde1de0f6":{"metadata":{"docker_image_id":"6632215868fa61d64fc6c3c88cb81a98f8c420d2922a8d436b8ba63bde1de0f6","docker_image_name":"gcr.io/google_containers/fluentd-gcp:1.13","host_node_id":"kubernetes-master;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-master;d47ce3dcfead875c0ae53f2f9da58f7ab64c6d904ce4576fc4aebc229606054c":{"metadata":{"docker_image_id":"d47ce3dcfead875c0ae53f2f9da58f7ab64c6d904ce4576fc4aebc229606054c","docker_image_name":"weaveworks/scope:latest","docker_label_works.weave.role":"system","host_node_id":"kubernetes-master;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-master;dfaea24a13fbbcc21713ac41261c41fbcb684544b73cc5c1aa491bdc6f650fc4":{"metadata":{"docker_image_id":"dfaea24a13fbbcc21713ac41261c41fbcb684544b73cc5c1aa491bdc6f650fc4","docker_image_name":"gcr.io/google_containers/kube-apiserver:01def964785ca89c9ee7ea3419918f39","host_node_id":"kubernetes-master;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-master;fafe4735269937ef7ba1fa0badb66d7fd70736619862e3982144c59289fddb11":{"metadata":{"docker_image_id":"fafe4735269937ef7ba1fa0badb66d7fd70736619862e3982144c59289fddb11","docker_image_name":"gcr.io/google_containers/etcd:2.0.12","host_node_id":"kubernetes-master;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;1adbf490a198ef89c6c2cf0511a1264a5a87bc9e43bc36eddf39cad5d0ad0730":{"metadata":{"docker_image_id":"1adbf490a198ef89c6c2cf0511a1264a5a87bc9e43bc36eddf39cad5d0ad0730","docker_image_name":"grafana/grafana:2.1.0","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;1e847b14150e365a95d76a9cc6b71cd67ca89905e3a0400fa44381ecf00890e1":{"metadata":{"docker_image_id":"1e847b14150e365a95d76a9cc6b71cd67ca89905e3a0400fa44381ecf00890e1","docker_image_name":"registry:2","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1":{"metadata":{"docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_image_name":"gcr.io/google_containers/pause:0.8.0","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;2f2578ff984f013c9a5d6cbb6fe061ed3f73a17380a4c9b53b76d4b8da3eda7d":{"metadata":{"docker_image_id":"2f2578ff984f013c9a5d6cbb6fe061ed3f73a17380a4c9b53b76d4b8da3eda7d","docker_image_name":"redis:latest","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;6632215868fa61d64fc6c3c88cb81a98f8c420d2922a8d436b8ba63bde1de0f6":{"metadata":{"docker_image_id":"6632215868fa61d64fc6c3c88cb81a98f8c420d2922a8d436b8ba63bde1de0f6","docker_image_name":"gcr.io/google_containers/fluentd-gcp:1.13","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;8b8118c488e431cc43e7ff9060968d88402cc6c38a6390c4221352403aa7ac1b":{"metadata":{"docker_image_id":"8b8118c488e431cc43e7ff9060968d88402cc6c38a6390c4221352403aa7ac1b","docker_image_name":"gcr.io/google_containers/heapster_influxdb:v0.4","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;9b9342c134bbda6f57c95c52cafd4ae40333dd6cc0fce4bace9296f957042d22":{"metadata":{"docker_image_id":"9b9342c134bbda6f57c95c52cafd4ae40333dd6cc0fce4bace9296f957042d22","docker_image_name":"gcr.io/google_containers/kube-registry-proxy:0.3","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;d47ce3dcfead875c0ae53f2f9da58f7ab64c6d904ce4576fc4aebc229606054c":{"metadata":{"docker_image_id":"d47ce3dcfead875c0ae53f2f9da58f7ab64c6d904ce4576fc4aebc229606054c","docker_image_name":"weaveworks/scope:latest","docker_label_works.weave.role":"system","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;ef8dcaba5c0f0789ce47dcf9913be5169a57a9a32cf7a4c1cc801f2ee3507ebb":{"metadata":{"docker_image_id":"ef8dcaba5c0f0789ce47dcf9913be5169a57a9a32cf7a4c1cc801f2ee3507ebb","docker_image_name":"gcr.io/google_samples/gb-frontend:v3","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-y1qq;f94ba9414e196599263898609a857a414fb9c7f201b3f8adc2599c15118ff048":{"metadata":{"docker_image_id":"f94ba9414e196599263898609a857a414fb9c7f201b3f8adc2599c15118ff048","docker_image_name":"gcr.io/google_samples/gb-redisslave:v1","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1":{"metadata":{"docker_image_id":"2c40b0526b6358710fd09e7b8c022429268cc61703b4777e528ac9d469a07ca1","docker_image_name":"gcr.io/google_containers/pause:0.8.0","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;4f3d04b1d47b64834d494f9416d1f17a5f93a3e2035ad604fee47cfbba62be60":{"metadata":{"docker_image_id":"4f3d04b1d47b64834d494f9416d1f17a5f93a3e2035ad604fee47cfbba62be60","docker_image_name":"gcr.io/google_containers/exechealthz:1.0","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;6286e698abf418689780df1d948f464e3eb990e5bf340af3a4e1b5f7a3211f54":{"metadata":{"docker_image_id":"6286e698abf418689780df1d948f464e3eb990e5bf340af3a4e1b5f7a3211f54","docker_image_name":"gcr.io/google_containers/kube-ui:v2","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;6632215868fa61d64fc6c3c88cb81a98f8c420d2922a8d436b8ba63bde1de0f6":{"metadata":{"docker_image_id":"6632215868fa61d64fc6c3c88cb81a98f8c420d2922a8d436b8ba63bde1de0f6","docker_image_name":"gcr.io/google_containers/fluentd-gcp:1.13","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;791ddf327076e0fd35a1125568a56c05ee1f1dfd7a165c74f4d489d8a5e65ac5":{"metadata":{"docker_image_id":"791ddf327076e0fd35a1125568a56c05ee1f1dfd7a165c74f4d489d8a5e65ac5","docker_image_name":"gcr.io/google_containers/skydns:2015-03-11-001","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;9b9342c134bbda6f57c95c52cafd4ae40333dd6cc0fce4bace9296f957042d22":{"metadata":{"docker_image_id":"9b9342c134bbda6f57c95c52cafd4ae40333dd6cc0fce4bace9296f957042d22","docker_image_name":"gcr.io/google_containers/kube-registry-proxy:0.3","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;b6b9a86dc06aa1361357ca1b105feba961f6a4145adca6c54e142c0be0fe87b0":{"metadata":{"docker_image_id":"b6b9a86dc06aa1361357ca1b105feba961f6a4145adca6c54e142c0be0fe87b0","docker_image_name":"gcr.io/google_containers/etcd:2.0.9","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;d47ce3dcfead875c0ae53f2f9da58f7ab64c6d904ce4576fc4aebc229606054c":{"metadata":{"docker_image_id":"d47ce3dcfead875c0ae53f2f9da58f7ab64c6d904ce4576fc4aebc229606054c","docker_image_name":"weaveworks/scope:latest","docker_label_works.weave.role":"system","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;e52a547dca17cd83e8b6022e8ae1c1883d0855bce2d1c30071ffa0dcb8a8caf6":{"metadata":{"docker_image_id":"e52a547dca17cd83e8b6022e8ae1c1883d0855bce2d1c30071ffa0dcb8a8caf6","docker_image_name":"gcr.io/google_containers/kube2sky:1.11","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;ef8dcaba5c0f0789ce47dcf9913be5169a57a9a32cf7a4c1cc801f2ee3507ebb":{"metadata":{"docker_image_id":"ef8dcaba5c0f0789ce47dcf9913be5169a57a9a32cf7a4c1cc801f2ee3507ebb","docker_image_name":"gcr.io/google_samples/gb-frontend:v3","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]},"kubernetes-minion-ynva;f94ba9414e196599263898609a857a414fb9c7f201b3f8adc2599c15118ff048":{"metadata":{"docker_image_id":"f94ba9414e196599263898609a857a414fb9c7f201b3f8adc2599c15118ff048","docker_image_name":"gcr.io/google_samples/gb-redisslave:v1","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","topology":"container_image"},"adjacency":[]}}},"Host":{"Nodes":{"kubernetes-master;\u003chost\u003e":{"metadata":{"host_name":"kubernetes-master","host_node_id":"kubernetes-master;\u003chost\u003e","kernel_version":"3.16.0-0.bpo.4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u2~bpo70+1 (2015-07-22)","load":"1.32 0.80 0.43","local_networks":"127.0.0.1/8 10.240.39.22/32 10.246.0.1/24","os":"linux","topology":"host","ts":"2015-09-29T15:16:23.862906092Z","uptime":"8m15s"},"adjacency":[]},"kubernetes-minion-y1qq;\u003chost\u003e":{"metadata":{"host_name":"kubernetes-minion-y1qq","host_node_id":"kubernetes-minion-y1qq;\u003chost\u003e","kernel_version":"3.16.0-0.bpo.4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u2~bpo70+1 (2015-07-22)","load":"0.63 0.91 0.48","local_networks":"127.0.0.1/8 10.240.105.97/32 10.244.0.1/24","os":"linux","topology":"host","ts":"2015-09-29T15:16:21.325813539Z","uptime":"7m25s"},"adjacency":[]},"kubernetes-minion-ynva;\u003chost\u003e":{"metadata":{"host_name":"kubernetes-minion-ynva","host_node_id":"kubernetes-minion-ynva;\u003chost\u003e","kernel_version":"3.16.0-0.bpo.4-amd64 #1 SMP Debian 3.16.7-ckt11-1+deb8u2~bpo70+1 (2015-07-22)","load":"0.24 0.31 0.19","local_networks":"127.0.0.1/8 10.240.72.84/32 10.244.1.1/24","os":"linux","topology":"host","ts":"2015-09-29T15:16:21.985011229Z","uptime":"7m27s"},"adjacency":[]}}},"Overlay":{"Nodes":{}},"Sampling":{"Count":0,"Total":0},"Window":45000000000} \ No newline at end of file diff --git a/experimental/graphviz/main.go b/experimental/graphviz/main.go deleted file mode 100644 index e7fd291e0..000000000 --- a/experimental/graphviz/main.go +++ /dev/null @@ -1,31 +0,0 @@ -package main - -import ( - "encoding/json" - "flag" - "log" - "net/http" - "os" - - "github.com/weaveworks/scope/report" -) - -func main() { - var ( - listen = flag.String("listen", ":8080", "HTTP listen address") - ) - flag.Parse() - - log.Printf("reading /api/report from stdin...") - var rpt report.Report - if err := json.NewDecoder(os.Stdin).Decode(&rpt); err != nil { - log.Fatal(err) - } - - http.HandleFunc("/", handleHTML(rpt)) - http.HandleFunc("/dot", handleDot(rpt)) - http.HandleFunc("/svg", handleSVG(rpt)) - http.HandleFunc("/favicon.ico", func(w http.ResponseWriter, _ *http.Request) { http.Error(w, "Stop it", http.StatusTeapot) }) - log.Printf("listening on %s", *listen) - http.ListenAndServe(*listen, nil) -} diff --git a/experimental/graphviz/render.go b/experimental/graphviz/render.go deleted file mode 100644 index 5c96f1ac4..000000000 --- a/experimental/graphviz/render.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/weaveworks/scope/render" - "github.com/weaveworks/scope/render/detailed" - "github.com/weaveworks/scope/report" -) - -func renderTo(rpt report.Report, topology string) (detailed.NodeSummaries, error) { - renderer, ok := map[string]render.Renderer{ - "processes": render.FilterUnconnected(render.ProcessWithContainerNameRenderer), - "processes-by-name": render.FilterUnconnected(render.ProcessNameRenderer), - "containers": render.ContainerWithImageNameRenderer, - "containers-by-image": render.ContainerImageRenderer, - "hosts": render.HostRenderer, - }[topology] - if !ok { - return detailed.NodeSummaries{}, fmt.Errorf("unknown topology %v", topology) - } - return detailed.Summaries(rpt, renderer.Render(rpt, nil)), nil -} diff --git a/experimental/kubernetes/install-scope.bash b/experimental/kubernetes/install-scope.bash deleted file mode 100755 index d791db252..000000000 --- a/experimental/kubernetes/install-scope.bash +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -export SSH_AUTH_SOCK= - -remote() { - host=$1 - shift - echo "[$host] Running: $@" >&2 - gcloud compute ssh $host --command "$@" -} - -for h in $(gcloud compute instances list | grep -v NAME | awk '{print $1}') ; do - cat ~/work/weave/repos/scope/scope.tar | remote $h "sudo docker load" - cat ~/work/weave/repos/scope/scope | remote $h "sudo tee /usr/local/bin/scope >/dev/null; sudo chmod a+x /usr/local/bin/scope" - if $(echo $h | grep -q "master") ; then - remote $h "sudo scope stop ; sudo DOCKER_BRIDGE=cbr0 scope launch --probe.docker.bridge cbr0 --probe.kubernetes true" - else - remote $h "sudo scope stop ; sudo DOCKER_BRIDGE=cbr0 scope launch --no-app --probe.docker.bridge cbr0 kubernetes-master" - fi -done diff --git a/experimental/multitenant/.gitignore b/experimental/multitenant/.gitignore deleted file mode 100644 index 352e4b59a..000000000 --- a/experimental/multitenant/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -collection/collection -query/query -control/control -static/static diff --git a/experimental/multitenant/Makefile b/experimental/multitenant/Makefile deleted file mode 100644 index 121a09a1e..000000000 --- a/experimental/multitenant/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -BUILD_IN_CONTAINER=true - -all: .frontend.uptodate - -.frontend.uptodate: frontend/* - docker build -t weaveworks/scope-frontend frontend/ - touch $@ - -clean: - go clean ./.. - rm -f .*.uptodate diff --git a/experimental/multitenant/frontend/Dockerfile b/experimental/multitenant/frontend/Dockerfile deleted file mode 100644 index 12c63c049..000000000 --- a/experimental/multitenant/frontend/Dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -FROM ubuntu -MAINTAINER Weaveworks Inc -RUN apt-get update && \ - apt-get install -y nginx && \ - rm -rf /var/lib/apt/lists/* -RUN rm /etc/nginx/sites-available/default && \ - ln -sf /dev/stdout /var/log/nginx/access.log && \ - ln -sf /dev/stderr /var/log/nginx/error.log -COPY default.conf /etc/nginx/conf.d/ -COPY api.json /home/weave/ -EXPOSE 80 -CMD ["nginx", "-g", "daemon off;"] diff --git a/experimental/multitenant/frontend/api.json b/experimental/multitenant/frontend/api.json deleted file mode 100644 index c830499ce..000000000 --- a/experimental/multitenant/frontend/api.json +++ /dev/null @@ -1 +0,0 @@ -{"id": "sccopeservice", "version": "Multimagic"} diff --git a/experimental/multitenant/frontend/default.conf b/experimental/multitenant/frontend/default.conf deleted file mode 100644 index 968e0dabe..000000000 --- a/experimental/multitenant/frontend/default.conf +++ /dev/null @@ -1,51 +0,0 @@ -server { - # Listen on port 80 insecurely until the probes all support https - listen 80; - resolver dns.weave.local; - - # topology (from UI) websockets - location ~ ^/api/topology/[^/]+/ws { - proxy_pass http://query.weave.local$request_uri; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } - - # control (from probe) websockets - location = /api/control/ws { - proxy_pass http://controls.weave.local$request_uri; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } - - # control (from probe & UI) websockets - location ~ ^/api/pipe/[^/]+(/probe)? { - proxy_pass http://pipes.weave.local$request_uri; - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - } - - location = /api/report { - proxy_pass http://collection.weave.local$request_uri; - } - - location /api/topology { - proxy_pass http://query.weave.local$request_uri; - } - - location /api/control { - proxy_pass http://controls.weave.local$request_uri; - } - - # Static version file - location = /api { - alias /home/weave/api.json; - } - - # The rest will be served by the collection server (any one can do it) - location / { - proxy_pass http://collection.weave.local$request_uri; - } -} diff --git a/experimental/multitenant/run.sh b/experimental/multitenant/run.sh deleted file mode 100755 index 25fd5ed4e..000000000 --- a/experimental/multitenant/run.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash - -set -eux - -eval $(weave env) -CHECKPOINT_DISABLE=true - -start_container() { - local replicas=$1 - local image=$2 - local basename=$3 - shift 3 - local hostname=${basename}.weave.local - - local docker_args= - while [ "$#" -gt 0 ]; do - case "$1" in - --) - shift - break - ;; - *) - docker_args="${docker_args} $1" - shift - ;; - esac - done - local container_args="$@" - - for i in $(seq ${replicas}); do - if docker inspect ${basename}${i} >/dev/null 2>&1; then - docker rm -f ${basename}${i} - fi - docker run -d -e CHECKPOINT_DISABLE --name=${basename}${i} --hostname=${hostname} \ - ${docker_args} ${image} ${container_args} - done -} - -# These are the infrastructure bits - do not use these containers in production -start_container 1 deangiberson/aws-dynamodb-local dynamodb -start_container 1 pakohan/elasticmq sqs -start_container 1 progrium/consul consul -p 8400:8400 -p 8500:8500 -p 8600:53/udp -- -server -bootstrap -ui-dir /ui - -# These are the micro services -common_args="--no-probe --app.weave.addr= --app.http.address=:80" -start_container 2 weaveworks/scope collection -- ${common_args} \ - --app.collector=dynamodb://abc:123@dynamodb.weave.local:8000 \ - --app.aws.create.tables=true -start_container 2 weaveworks/scope query -- ${common_args} \ - --app.collector=dynamodb://abc:123@dynamodb.weave.local:8000 -start_container 2 weaveworks/scope controls -- ${common_args} \ - --app.control.router=sqs://abc:123@sqs.weave.local:9324 -start_container 2 weaveworks/scope pipes -- ${common_args} \ - --app.pipe.router=consul://consul.weave.local:8500/pipes/ \ - --app.consul.inf=ethwe - -# And we bring it all together with a reverse proxy -start_container 1 weaveworks/scope-frontend frontend --add-host=dns.weave.local:$(weave docker-bridge-ip) --publish=4040:80 diff --git a/experimental/pipeclient/.gitignore b/experimental/pipeclient/.gitignore deleted file mode 100644 index 3ba9ee9a6..000000000 --- a/experimental/pipeclient/.gitignore +++ /dev/null @@ -1 +0,0 @@ -pipeclient diff --git a/experimental/pipeclient/main.go b/experimental/pipeclient/main.go deleted file mode 100644 index bf986bae9..000000000 --- a/experimental/pipeclient/main.go +++ /dev/null @@ -1,77 +0,0 @@ -package main - -import ( - "log" - "os" - - "github.com/gorilla/websocket" - //"golang.org/x/crypto/ssh/terminal" - "github.com/davecgh/go-spew/spew" -) - -func main() { - if len(os.Args) < 2 { - log.Fatal("must specify url") - } - url := os.Args[1] - log.Printf("Connecting to %s", url) - - //oldState, err := terminal.MakeRaw(0) - //if err != nil { - // panic(err) - //} - //defer terminal.Restore(0, oldState) - - dialer := websocket.Dialer{} - conn, _, err := dialer.Dial(url, nil) - if err != nil { - panic(err) - } - defer conn.Close() - readQuit := make(chan struct{}) - writeQuit := make(chan struct{}) - - // Read-from-UI loop - go func() { - defer close(readQuit) - for { - _, buf, err := conn.ReadMessage() // TODO type should be binary message - if err != nil { - log.Printf("Error reading websocket: %v", err) - return - } - - spew.Dump(buf) - - if _, err := os.Stdout.Write(buf); err != nil { - log.Printf("Error writing stdout: %v", err) - return - } - } - }() - - // Write-to-UI loop - go func() { - defer close(writeQuit) - buf := make([]byte, 1024) - for { - n, err := os.Stdin.Read(buf) - if err != nil { - log.Printf("Error reading stdin: %v", err) - return - } - - if err := conn.WriteMessage(websocket.BinaryMessage, buf[:n]); err != nil { - log.Printf("Error writing websocket: %v", err) - return - } - } - }() - - // block until one of the goroutines exits - // this convoluted mechanism is to ensure we only close the websocket once. - select { - case <-readQuit: - case <-writeQuit: - } -} diff --git a/experimental/shots/tns-example.json b/experimental/shots/tns-example.json deleted file mode 100644 index 835cee57a..000000000 --- a/experimental/shots/tns-example.json +++ /dev/null @@ -1 +0,0 @@ -{"Endpoint":{"Adjacency":{"\u003etest1;127.0.0.1;4030":["test1;127.0.0.1;57746"],"\u003etest1;127.0.0.1;57746":["test1;127.0.0.1;4030"],"\u003etest1;172.17.0.1;9000":["test1;172.17.0.4;54466","test1;172.17.0.5;53604"],"\u003etest1;172.17.0.2;9000":["test1;172.17.0.4;43257","test1;172.17.0.5;59407"],"\u003etest1;172.17.0.3;9000":["test1;172.17.0.4;34790","test1;172.17.0.5;33013"],"\u003etest1;172.17.0.4;34790":["test1;172.17.0.3;9000"],"\u003etest1;172.17.0.4;43257":["test1;172.17.0.2;9000"],"\u003etest1;172.17.0.4;54466":["test1;172.17.0.1;9000"],"\u003etest1;172.17.0.4;8080":["test1;172.17.0.6;34384","test1;172.17.0.7;46277"],"\u003etest1;172.17.0.5;33013":["test1;172.17.0.3;9000"],"\u003etest1;172.17.0.5;53604":["test1;172.17.0.1;9000"],"\u003etest1;172.17.0.5;59407":["test1;172.17.0.2;9000"],"\u003etest1;172.17.0.5;8080":["test1;172.17.0.6;51389","test1;172.17.0.7;57052"],"\u003etest1;172.17.0.6;34384":["test1;172.17.0.4;8080"],"\u003etest1;172.17.0.6;51389":["test1;172.17.0.5;8080"],"\u003etest1;172.17.0.7;46277":["test1;172.17.0.4;8080"],"\u003etest1;172.17.0.7;57052":["test1;172.17.0.5;8080"],"\u003etest1;178.62.212.134;4040":["theinternet"]},"EdgeMetadatas":{"test1;127.0.0.1;4030|test1;127.0.0.1;57746":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;127.0.0.1;57746|test1;127.0.0.1;4030":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;172.17.0.1;9000|test1;172.17.0.4;54466":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.1;9000|test1;172.17.0.5;53604":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.2;9000|test1;172.17.0.4;43257":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.2;9000|test1;172.17.0.5;59407":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.3;9000|test1;172.17.0.4;34790":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.3;9000|test1;172.17.0.5;33013":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4;34790|test1;172.17.0.3;9000":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4;43257|test1;172.17.0.2;9000":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4;54466|test1;172.17.0.1;9000":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4;8080|test1;172.17.0.6;34384":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4;8080|test1;172.17.0.7;46277":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5;33013|test1;172.17.0.3;9000":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5;53604|test1;172.17.0.1;9000":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5;59407|test1;172.17.0.2;9000":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5;8080|test1;172.17.0.6;51389":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5;8080|test1;172.17.0.7;57052":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.6;34384|test1;172.17.0.4;8080":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.6;51389|test1;172.17.0.5;8080":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.7;46277|test1;172.17.0.4;8080":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.7;57052|test1;172.17.0.5;8080":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;178.62.212.134;4040|test1;212.121.131.210;10085":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;212.121.131.210;19222":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;212.121.131.210;21682":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;212.121.131.210;22131":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;212.121.131.210;29459":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;37.157.33.76;30032":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;37.157.33.76;37448":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;37.157.33.76;43468":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;37.157.33.76;51510":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;37.157.33.76;56766":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;37.157.33.76;57354":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;80.110.42.141;62346":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;80.110.42.141;62347":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;80.110.42.141;62351":{"with_conn_count_tcp":true,"max_conn_count_tcp":76},"test1;178.62.212.134;4040|test1;80.110.42.141;62355":{"with_conn_count_tcp":true,"max_conn_count_tcp":76}},"NodeMetadatas":{"test1;127.0.0.1;4030":{"docker_container_id":"3e0ed85138de22e7a39ebab40ec493432978001031070ca62898ea330cc827b0","docker_container_name":"weavescope","docker_image_id":"da355ac0f6313991896cb299ce5b6c1b7000a412d00b1c3c9a76eba3802ec30e","docker_image_name":"weaveworks/scope:latest","domain":"test1","name":"probe","pid":"9545","topology":"endpoint"},"test1;127.0.0.1;57746":{"docker_container_id":"3e0ed85138de22e7a39ebab40ec493432978001031070ca62898ea330cc827b0","docker_container_name":"weavescope","docker_image_id":"da355ac0f6313991896cb299ce5b6c1b7000a412d00b1c3c9a76eba3802ec30e","docker_image_name":"weaveworks/scope:latest","domain":"test1","name":"app","pid":"9543","topology":"endpoint"},"test1;172.17.0.1;9000":{"docker_container_id":"9add1e99804d18cbe7c7dd707f4053efee891d927008f920feebaa614453e51c","docker_container_name":"peter_db1_1","docker_image_id":"e4fb99a3c9adf3f1cbb1cfc07aee8b79968507185798b42de616857bf79f0b08","docker_image_name":"peterbourgon/tns-db:latest","domain":"test1","name":"db","pid":"7575","topology":"endpoint"},"test1;172.17.0.2;9000":{"docker_container_id":"ac2192ff841ec5f74ab20ca8ff2f9e9501b819dc060ce532ce645809e03ec01f","docker_container_name":"peter_db2_1","docker_image_id":"e4fb99a3c9adf3f1cbb1cfc07aee8b79968507185798b42de616857bf79f0b08","docker_image_name":"peterbourgon/tns-db:latest","domain":"test1","name":"db","pid":"7615","topology":"endpoint"},"test1;172.17.0.3;9000":{"docker_container_id":"c04f86a4cdedf8b1f84425030973a563f0aa129d5925c6d43341e265abf703a8","docker_container_name":"peter_db3_1","docker_image_id":"e4fb99a3c9adf3f1cbb1cfc07aee8b79968507185798b42de616857bf79f0b08","docker_image_name":"peterbourgon/tns-db:latest","domain":"test1","name":"db","pid":"7655","topology":"endpoint"},"test1;172.17.0.4;34790":{"docker_container_id":"3ea5502bbc77a7cd31380b42c4e77410247881af69b36ce609c8479007cf21d4","docker_container_name":"peter_app2_1","docker_image_id":"86ba1164dff9b006ae7598681683eccca50de4419921647433138bcdbb273fb1","docker_image_name":"peterbourgon/tns-app:latest","domain":"test1","name":"app","pid":"7723","topology":"endpoint"},"test1;172.17.0.4;43257":{"docker_container_id":"3ea5502bbc77a7cd31380b42c4e77410247881af69b36ce609c8479007cf21d4","docker_container_name":"peter_app2_1","docker_image_id":"86ba1164dff9b006ae7598681683eccca50de4419921647433138bcdbb273fb1","docker_image_name":"peterbourgon/tns-app:latest","domain":"test1","name":"app","pid":"7723","topology":"endpoint"},"test1;172.17.0.4;54466":{"docker_container_id":"3ea5502bbc77a7cd31380b42c4e77410247881af69b36ce609c8479007cf21d4","docker_container_name":"peter_app2_1","docker_image_id":"86ba1164dff9b006ae7598681683eccca50de4419921647433138bcdbb273fb1","docker_image_name":"peterbourgon/tns-app:latest","domain":"test1","name":"app","pid":"7723","topology":"endpoint"},"test1;172.17.0.4;8080":{"docker_container_id":"3ea5502bbc77a7cd31380b42c4e77410247881af69b36ce609c8479007cf21d4","docker_container_name":"peter_app2_1","docker_image_id":"86ba1164dff9b006ae7598681683eccca50de4419921647433138bcdbb273fb1","docker_image_name":"peterbourgon/tns-app:latest","domain":"test1","name":"app","pid":"7723","topology":"endpoint"},"test1;172.17.0.5;33013":{"docker_container_id":"82c1ad50ed789a1192f1e2fcf52d5ea384b241c4e9bd4ec46335ace4bb9b4024","docker_container_name":"peter_app1_1","docker_image_id":"86ba1164dff9b006ae7598681683eccca50de4419921647433138bcdbb273fb1","docker_image_name":"peterbourgon/tns-app:latest","domain":"test1","name":"app","pid":"7774","topology":"endpoint"},"test1;172.17.0.5;53604":{"docker_container_id":"82c1ad50ed789a1192f1e2fcf52d5ea384b241c4e9bd4ec46335ace4bb9b4024","docker_container_name":"peter_app1_1","docker_image_id":"86ba1164dff9b006ae7598681683eccca50de4419921647433138bcdbb273fb1","docker_image_name":"peterbourgon/tns-app:latest","domain":"test1","name":"app","pid":"7774","topology":"endpoint"},"test1;172.17.0.5;59407":{"docker_container_id":"82c1ad50ed789a1192f1e2fcf52d5ea384b241c4e9bd4ec46335ace4bb9b4024","docker_container_name":"peter_app1_1","docker_image_id":"86ba1164dff9b006ae7598681683eccca50de4419921647433138bcdbb273fb1","docker_image_name":"peterbourgon/tns-app:latest","domain":"test1","name":"app","pid":"7774","topology":"endpoint"},"test1;172.17.0.5;8080":{"docker_container_id":"82c1ad50ed789a1192f1e2fcf52d5ea384b241c4e9bd4ec46335ace4bb9b4024","docker_container_name":"peter_app1_1","docker_image_id":"86ba1164dff9b006ae7598681683eccca50de4419921647433138bcdbb273fb1","docker_image_name":"peterbourgon/tns-app:latest","domain":"test1","name":"app","pid":"7774","topology":"endpoint"},"test1;172.17.0.6;34384":{"docker_container_id":"73958d917b28fa71da972bf8f899e8cd0701b3cf218c9a879012b47d4d2f07f3","docker_container_name":"peter_lb2_1","docker_image_id":"86df5a42a63227af4884467a504af36a957cc9d2e58c15ae1525749279642616","docker_image_name":"peterbourgon/tns-lb:latest","domain":"test1","name":"lb","pid":"7849","topology":"endpoint"},"test1;172.17.0.6;51389":{"docker_container_id":"73958d917b28fa71da972bf8f899e8cd0701b3cf218c9a879012b47d4d2f07f3","docker_container_name":"peter_lb2_1","docker_image_id":"86df5a42a63227af4884467a504af36a957cc9d2e58c15ae1525749279642616","docker_image_name":"peterbourgon/tns-lb:latest","domain":"test1","name":"lb","pid":"7849","topology":"endpoint"},"test1;172.17.0.7;46277":{"docker_container_id":"ea4096f0f0394f1b399d4439bcc93cfef67ec214a0e1f5c42297f75efb04febb","docker_container_name":"peter_lb1_1","docker_image_id":"86df5a42a63227af4884467a504af36a957cc9d2e58c15ae1525749279642616","docker_image_name":"peterbourgon/tns-lb:latest","domain":"test1","name":"lb","pid":"7901","topology":"endpoint"},"test1;172.17.0.7;57052":{"docker_container_id":"ea4096f0f0394f1b399d4439bcc93cfef67ec214a0e1f5c42297f75efb04febb","docker_container_name":"peter_lb1_1","docker_image_id":"86df5a42a63227af4884467a504af36a957cc9d2e58c15ae1525749279642616","docker_image_name":"peterbourgon/tns-lb:latest","domain":"test1","name":"lb","pid":"7901","topology":"endpoint"},"test1;178.62.212.134;4040":{"docker_container_id":"3e0ed85138de22e7a39ebab40ec493432978001031070ca62898ea330cc827b0","docker_container_name":"weavescope","docker_image_id":"da355ac0f6313991896cb299ce5b6c1b7000a412d00b1c3c9a76eba3802ec30e","docker_image_name":"weaveworks/scope:latest","domain":"test1","name":"app","pid":"9543","topology":"endpoint"}}},"Address":{"Adjacency":{"\u003etest1;127.0.0.1":["test1;127.0.0.1"],"\u003etest1;172.17.0.1":["test1;172.17.0.4","test1;172.17.0.5"],"\u003etest1;172.17.0.2":["test1;172.17.0.4","test1;172.17.0.5"],"\u003etest1;172.17.0.3":["test1;172.17.0.4","test1;172.17.0.5"],"\u003etest1;172.17.0.4":["test1;172.17.0.1","test1;172.17.0.2","test1;172.17.0.3","test1;172.17.0.6","test1;172.17.0.7"],"\u003etest1;172.17.0.5":["test1;172.17.0.1","test1;172.17.0.2","test1;172.17.0.3","test1;172.17.0.6","test1;172.17.0.7"],"\u003etest1;172.17.0.6":["test1;172.17.0.4","test1;172.17.0.5"],"\u003etest1;172.17.0.7":["test1;172.17.0.4","test1;172.17.0.5"],"\u003etest1;178.62.212.134":["theinternet"]},"EdgeMetadatas":{"test1;127.0.0.1|test1;127.0.0.1":{"with_conn_count_tcp":true,"max_conn_count_tcp":152},"test1;172.17.0.1|test1;172.17.0.4":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.1|test1;172.17.0.5":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.2|test1;172.17.0.4":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.2|test1;172.17.0.5":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.3|test1;172.17.0.4":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.3|test1;172.17.0.5":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4|test1;172.17.0.1":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4|test1;172.17.0.2":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4|test1;172.17.0.3":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4|test1;172.17.0.6":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.4|test1;172.17.0.7":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5|test1;172.17.0.1":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5|test1;172.17.0.2":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5|test1;172.17.0.3":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5|test1;172.17.0.6":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.5|test1;172.17.0.7":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.6|test1;172.17.0.4":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.6|test1;172.17.0.5":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.7|test1;172.17.0.4":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;172.17.0.7|test1;172.17.0.5":{"with_conn_count_tcp":true,"max_conn_count_tcp":1},"test1;178.62.212.134|test1;212.121.131.210":{"with_conn_count_tcp":true,"max_conn_count_tcp":380},"test1;178.62.212.134|test1;37.157.33.76":{"with_conn_count_tcp":true,"max_conn_count_tcp":228},"test1;178.62.212.134|test1;80.110.42.141":{"with_conn_count_tcp":true,"max_conn_count_tcp":304}},"NodeMetadatas":{"test1;127.0.0.1":{"name":"test1","topology":"address"},"test1;172.17.0.1":{"name":"test1","topology":"address"},"test1;172.17.0.2":{"name":"test1","topology":"address"},"test1;172.17.0.3":{"name":"test1","topology":"address"},"test1;172.17.0.4":{"name":"test1","topology":"address"},"test1;172.17.0.5":{"name":"test1","topology":"address"},"test1;172.17.0.6":{"name":"test1","topology":"address"},"test1;172.17.0.7":{"name":"test1","topology":"address"},"test1;178.62.212.134":{"name":"test1","topology":"address"}}},"Host":{"Adjacency":{},"EdgeMetadatas":{},"NodeMetadatas":{"test1;\u003chost\u003e":{"host_name":"test1","load":"0.11 0.16 0.09","local_networks":"127.0.0.1/8 178.62.212.134/18 172.17.42.1/16 ::1/128 fe80::601:56ff:fe43:801/64 fe80::5484:7aff:fefe:9799/64 fe80::bcd8:e5ff:fe45:d912/64 fe80::4098:d8ff:fe4b:2c9e/64 fe80::4c23:a2ff:fe01:8751/64 fe80::ca3:d8ff:fe86:77d7/64 fe80::60ad:8ff:fee6:485c/64 fe80::548a:e7ff:fe20:a791/64 fe80::e4de:d0ff:fe9e:a860/64","os":"linux","ts":"2015-06-10T13:40:23.57501026Z"}}}} diff --git a/experimental/sniff/sniffer.go b/experimental/sniff/sniffer.go deleted file mode 100644 index 8846ffd74..000000000 --- a/experimental/sniff/sniffer.go +++ /dev/null @@ -1,332 +0,0 @@ -package sniff - -import ( - "io" - "log" - "net" - "strconv" - "sync/atomic" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - - "github.com/weaveworks/scope/report" -) - -/* -It's important to adjust GOMAXPROCS when using sniffer: - -if *captureEnabled { - var sniffers int - for _, iface := range strings.Split(*captureInterfaces, ",") { - source, err := sniff.NewSource(iface) - if err != nil { - log.Printf("warning: %v", err) - continue - } - defer source.Close() - log.Printf("capturing packets on %s", iface) - reporters = append(reporters, sniff.New(hostID, localNets, source, *captureOn, *captureOff)) - sniffers++ - } - // Packet capture can block OS threads on Linux, so we need to provide - // sufficient overhead in GOMAXPROCS. - if have, want := runtime.GOMAXPROCS(-1), (sniffers + 1); have < want { - runtime.GOMAXPROCS(want) - } -} - -func interfaces() string { - ifaces, err := net.Interfaces() - if err != nil { - log.Print(err) - return "" - } - a := make([]string, 0, len(ifaces)) - for _, iface := range ifaces { - a = append(a, iface.Name) - } - return strings.Join(a, ",") -} - -Also, the capture on/off sampling methodology is probably not worth keeping. -*/ - -// Sniffer is a packet-sniffing reporter. -type Sniffer struct { - hostID string - localNets report.Networks - reports chan chan report.Report - parser *gopacket.DecodingLayerParser - decoded []gopacket.LayerType - eth layers.Ethernet - ip4 layers.IPv4 - ip6 layers.IPv6 - tcp layers.TCP - udp layers.UDP - icmp4 layers.ICMPv4 - icmp6 layers.ICMPv6 -} - -// New returns a new sniffing reporter that samples traffic by turning its -// packet capture facilities on and off. Note that the on and off durations -// represent a way to bound CPU burn. Effective sample rate needs to be -// calculated as (packets decoded / packets observed). -func New(hostID string, localNets report.Networks, src gopacket.ZeroCopyPacketDataSource, on, off time.Duration) *Sniffer { - s := &Sniffer{ - hostID: hostID, - localNets: localNets, - reports: make(chan chan report.Report), - } - s.parser = gopacket.NewDecodingLayerParser( - layers.LayerTypeEthernet, - &s.eth, &s.ip4, &s.ip6, &s.tcp, &s.udp, &s.icmp4, &s.icmp6, - ) - go s.loop(src, on, off) - return s -} - -// Report implements the Reporter interface. -func (s *Sniffer) Report() (report.Report, error) { - c := make(chan report.Report) - s.reports <- c - return <-c, nil -} - -func (s *Sniffer) loop(src gopacket.ZeroCopyPacketDataSource, on, off time.Duration) { - var ( - process = uint64(1) // initially enabled - total = uint64(0) // total packets seen - count = uint64(0) // count of packets captured - packets = make(chan Packet, 1024) // decoded packets - rpt = report.MakeReport() // the report we build - turnOn = (<-chan time.Time)(nil) // signal to start capture (initially enabled) - turnOff = time.After(on) // signal to stop capture - done = make(chan struct{}) // when src is finished, we're done too - ) - - // As a special case, if our off duty cycle is zero, i.e. 100% sample - // rate, we simply disable the turn-off signal channel. - if off == 0 { - turnOff = nil - } - - go func() { - s.read(src, packets, &process, &total, &count) - close(done) - }() - - for { - select { - case p := <-packets: - s.Merge(p, &rpt) - - case <-turnOn: - atomic.StoreUint64(&process, 1) // enable packet capture - turnOn = nil // disable the on switch - turnOff = time.After(on) // enable the off switch - - case <-turnOff: - atomic.StoreUint64(&process, 0) // disable packet capture - turnOn = time.After(off) // enable the on switch - turnOff = nil // disable the off switch - - case c := <-s.reports: - rpt.Sampling.Count = atomic.LoadUint64(&count) - rpt.Sampling.Total = atomic.LoadUint64(&total) - interpolateCounts(rpt) - c <- rpt - atomic.StoreUint64(&count, 0) - atomic.StoreUint64(&total, 0) - rpt = report.MakeReport() - - case <-done: - return - } - } -} - -// interpolateCounts compensates for sampling by artificially inflating counts -// throughout the report. It should be run once for each report, within the -// probe, before it gets emitted into the rest of the system. -func interpolateCounts(r report.Report) { - rate := r.Sampling.Rate() - if rate >= 1.0 { - return - } - factor := 1.0 / rate - for _, topology := range r.Topologies() { - for _, nmd := range topology.Nodes { - nmd.Edges.ForEach(func(_ string, emd report.EdgeMetadata) { - if emd.EgressPacketCount != nil { - *emd.EgressPacketCount = uint64(float64(*emd.EgressPacketCount) * factor) - } - if emd.IngressPacketCount != nil { - *emd.IngressPacketCount = uint64(float64(*emd.IngressPacketCount) * factor) - } - if emd.EgressByteCount != nil { - *emd.EgressByteCount = uint64(float64(*emd.EgressByteCount) * factor) - } - if emd.IngressByteCount != nil { - *emd.IngressByteCount = uint64(float64(*emd.IngressByteCount) * factor) - } - }) - } - } -} - -// Packet is an intermediate, decoded form of a packet, with the information -// that the Scope data model cares about. Designed to decouple the packet data -// source loop, which should be as fast as possible, and the process of -// merging the packet information to a report, which may take some time and -// allocations. -type Packet struct { - SrcIP, DstIP string - SrcPort, DstPort string - Network, Transport int // byte counts -} - -func (s *Sniffer) read(src gopacket.ZeroCopyPacketDataSource, dst chan Packet, process, total, count *uint64) { - var ( - data []byte - err error - ) - for { - data, _, err = src.ZeroCopyReadPacketData() - if err == io.EOF { - return // done - } - if err != nil { - log.Printf("sniffer: read: %v", err) - continue - } - atomic.AddUint64(total, 1) - if atomic.LoadUint64(process) == 0 { - continue - } - - if err := s.parser.DecodeLayers(data, &s.decoded); err != nil { - // We'll always get an error when we encounter a layer type for - // which we haven't configured a decoder. - } - var p Packet - for _, t := range s.decoded { - switch t { - case layers.LayerTypeEthernet: - // - - case layers.LayerTypeICMPv4: - p.Network += len(s.icmp4.Payload) - - case layers.LayerTypeICMPv6: - p.Network += len(s.icmp6.Payload) - - case layers.LayerTypeIPv4: - p.SrcIP = s.ip4.SrcIP.String() - p.DstIP = s.ip4.DstIP.String() - p.Network += len(s.ip4.Payload) - - case layers.LayerTypeIPv6: - p.SrcIP = s.ip6.SrcIP.String() - p.DstIP = s.ip6.DstIP.String() - p.Network += len(s.ip6.Payload) - - case layers.LayerTypeTCP: - p.SrcPort = strconv.Itoa(int(s.tcp.SrcPort)) - p.DstPort = strconv.Itoa(int(s.tcp.DstPort)) - p.Transport += len(s.tcp.Payload) - - case layers.LayerTypeUDP: - p.SrcPort = strconv.Itoa(int(s.udp.SrcPort)) - p.DstPort = strconv.Itoa(int(s.udp.DstPort)) - p.Transport += len(s.udp.Payload) - } - } - select { - case dst <- p: - atomic.AddUint64(count, 1) - default: - log.Printf("sniffer dropped packet") - } - } -} - -// Merge puts the packet into the report. -// -// Note that, for the moment, we encode bidirectional traffic as ingress and -// egress traffic on a single edge whose src is local and dst is remote. That -// is, if we see a packet from the remote addr 9.8.7.6 to the local addr -// 1.2.3.4, we apply it as *ingress* on the edge (1.2.3.4 -> 9.8.7.6). -func (s *Sniffer) Merge(p Packet, rpt *report.Report) { - if p.SrcIP == "" || p.DstIP == "" { - return - } - - // One end of the traffic has to be local. Otherwise, we don't know how to - // construct the edge. - // - // If we need to get around this limitation, we may be able to change the - // semantics of the report, and allow the src side of edges to be from - // anywhere. But that will have ramifications throughout Scope (read: it - // may violate implicit invariants) and needs to be thought through. - var ( - srcLocal = s.localNets.Contains(net.ParseIP(p.SrcIP)) - dstLocal = s.localNets.Contains(net.ParseIP(p.DstIP)) - localIP string - remoteIP string - localPort string - remotePort string - egress bool - ) - switch { - case srcLocal && !dstLocal: - localIP, localPort, remoteIP, remotePort, egress = p.SrcIP, p.SrcPort, p.DstIP, p.DstPort, true - case !srcLocal && dstLocal: - localIP, localPort, remoteIP, remotePort, egress = p.DstIP, p.DstPort, p.SrcIP, p.SrcPort, false - case srcLocal && dstLocal: - localIP, localPort, remoteIP, remotePort, egress = p.SrcIP, p.SrcPort, p.DstIP, p.DstPort, true // loopback - case !srcLocal && !dstLocal: - log.Printf("sniffer ignoring remote-to-remote (%s -> %s) traffic", p.SrcIP, p.DstIP) - return - } - - addAdjacency := func(t report.Topology, srcNodeID, dstNodeID string) report.Topology { - result := t.AddNode(report.MakeNode(srcNodeID).WithAdjacent(dstNodeID)) - result = result.AddNode(report.MakeNode(dstNodeID)) - return result - } - - // If we have ports, we can add to the endpoint topology, too. - if p.SrcPort != "" && p.DstPort != "" { - var ( - srcNodeID = report.MakeEndpointNodeID(s.hostID, localIP, localPort) - dstNodeID = report.MakeEndpointNodeID(s.hostID, remoteIP, remotePort) - ) - - rpt.Endpoint = addAdjacency(rpt.Endpoint, srcNodeID, dstNodeID) - - node := rpt.Endpoint.Nodes[srcNodeID] - emd, _ := node.Edges.Lookup(dstNodeID) - if egress { - if emd.EgressPacketCount == nil { - emd.EgressPacketCount = new(uint64) - } - *emd.EgressPacketCount++ - if emd.EgressByteCount == nil { - emd.EgressByteCount = new(uint64) - } - *emd.EgressByteCount += uint64(p.Transport) - } else { - if emd.IngressPacketCount == nil { - emd.IngressPacketCount = new(uint64) - } - *emd.IngressPacketCount++ - if emd.IngressByteCount == nil { - emd.IngressByteCount = new(uint64) - } - *emd.IngressByteCount += uint64(p.Transport) - } - rpt.Endpoint.Nodes[srcNodeID] = node.WithEdge(dstNodeID, emd) - } -} diff --git a/experimental/sniff/sniffer_internal_test.go b/experimental/sniff/sniffer_internal_test.go deleted file mode 100644 index ce2dcbc0d..000000000 --- a/experimental/sniff/sniffer_internal_test.go +++ /dev/null @@ -1,52 +0,0 @@ -package sniff - -import ( - "testing" - - "github.com/weaveworks/scope/report" -) - -func TestInterpolateCounts(t *testing.T) { - var ( - hostID = "macbook-air" - srcNodeID = report.MakeEndpointNodeID(hostID, "1.2.3.4", "5678") - dstNodeID = report.MakeEndpointNodeID(hostID, "5.6.7.8", "9012") - samplingCount = uint64(200) - samplingTotal = uint64(2345) - packetCount = uint64(123) - byteCount = uint64(4096) - ) - - r := report.MakeReport() - r.Sampling.Count = samplingCount - r.Sampling.Total = samplingTotal - r.Endpoint.AddNode(report.MakeNode(srcNodeID).WithEdge(dstNodeID, report.EdgeMetadata{ - EgressPacketCount: newu64(packetCount), - IngressPacketCount: newu64(packetCount), - EgressByteCount: newu64(byteCount), - IngressByteCount: newu64(byteCount), - })) - - interpolateCounts(r) - - var ( - rate = float64(samplingCount) / float64(samplingTotal) - factor = 1.0 / rate - apply = func(v uint64) uint64 { return uint64(factor * float64(v)) } - emd = r.Endpoint.Nodes[srcNodeID].Edges[dstNodeID] - ) - if want, have := apply(packetCount), (*emd.EgressPacketCount); want != have { - t.Errorf("want %d packets, have %d", want, have) - } - if want, have := apply(packetCount), (*emd.IngressPacketCount); want != have { - t.Errorf("want %d packets, have %d", want, have) - } - if want, have := apply(byteCount), (*emd.EgressByteCount); want != have { - t.Errorf("want %d bytes, have %d", want, have) - } - if want, have := apply(byteCount), (*emd.IngressByteCount); want != have { - t.Errorf("want %d bytes, have %d", want, have) - } -} - -func newu64(value uint64) *uint64 { return &value } diff --git a/experimental/sniff/sniffer_test.go b/experimental/sniff/sniffer_test.go deleted file mode 100644 index b7948962b..000000000 --- a/experimental/sniff/sniffer_test.go +++ /dev/null @@ -1,125 +0,0 @@ -package sniff_test - -import ( - "io" - "net" - "reflect" - "sync" - "testing" - "time" - - "github.com/google/gopacket" - - "github.com/weaveworks/scope/experimental/sniff" - "github.com/weaveworks/scope/report" - "github.com/weaveworks/scope/test" -) - -func TestSnifferShutdown(t *testing.T) { - var ( - hostID = "abcd" - src = newMockSource([]byte{}, nil) - on = time.Millisecond - off = time.Millisecond - s = sniff.New(hostID, report.Networks{}, src, on, off) - ) - - // Stopping the source should terminate the sniffer. - src.Close() - time.Sleep(10 * time.Millisecond) - - // Try to get a report from the sniffer. It should block forever, as the - // loop goroutine should have exited. - report := make(chan struct{}) - go func() { _, _ = s.Report(); close(report) }() - select { - case <-time.After(time.Millisecond): - case <-report: - t.Errorf("shouldn't get report after Close") - } -} - -func TestMerge(t *testing.T) { - var ( - hostID = "xyz" - src = newMockSource([]byte{}, nil) - on = time.Millisecond - off = time.Millisecond - rpt = report.MakeReport() - p = sniff.Packet{ - SrcIP: "1.0.0.0", - SrcPort: "1000", - DstIP: "2.0.0.0", - DstPort: "2000", - Network: 512, - Transport: 256, - } - - _, ipnet, _ = net.ParseCIDR(p.SrcIP + "/24") // ;) - localNets = report.Networks([]*net.IPNet{ipnet}) - ) - sniff.New(hostID, localNets, src, on, off).Merge(p, &rpt) - - var ( - srcEndpointNodeID = report.MakeEndpointNodeID(hostID, p.SrcIP, p.SrcPort) - dstEndpointNodeID = report.MakeEndpointNodeID(hostID, p.DstIP, p.DstPort) - ) - if want, have := (report.Topology{ - Nodes: report.Nodes{ - srcEndpointNodeID: report.MakeNode(srcEndpointNodeID).WithEdge(dstEndpointNodeID, report.EdgeMetadata{ - EgressPacketCount: newu64(1), - EgressByteCount: newu64(256), - }), - dstEndpointNodeID: report.MakeNode(dstEndpointNodeID), - }, - }), rpt.Endpoint; !reflect.DeepEqual(want, have) { - t.Errorf("%s", test.Diff(want, have)) - } - - var ( - srcAddressNodeID = report.MakeAddressNodeID(hostID, p.SrcIP) - dstAddressNodeID = report.MakeAddressNodeID(hostID, p.DstIP) - ) - if want, have := (report.Topology{ - Nodes: report.Nodes{ - srcAddressNodeID: report.MakeNode(srcAddressNodeID).WithEdge(dstAddressNodeID, report.EdgeMetadata{ - EgressPacketCount: newu64(1), - EgressByteCount: newu64(512), - }), - dstAddressNodeID: report.MakeNode(dstAddressNodeID), - }, - }), rpt.Address; !reflect.DeepEqual(want, have) { - t.Errorf("%s", test.Diff(want, have)) - } -} - -type mockSource struct { - mtx sync.RWMutex - data []byte - err error -} - -func newMockSource(data []byte, err error) *mockSource { - return &mockSource{ - data: data, - err: err, - } -} - -func (s *mockSource) ZeroCopyReadPacketData() ([]byte, gopacket.CaptureInfo, error) { - s.mtx.RLock() - defer s.mtx.RUnlock() - return s.data, gopacket.CaptureInfo{ - Timestamp: time.Now(), - CaptureLength: len(s.data), - Length: len(s.data), - }, s.err -} - -func (s *mockSource) Close() { - s.mtx.Lock() - defer s.mtx.Unlock() - s.err = io.EOF -} - -func newu64(value uint64) *uint64 { return &value } diff --git a/experimental/sniff/source.go b/experimental/sniff/source.go deleted file mode 100644 index 0ac4a4ff6..000000000 --- a/experimental/sniff/source.go +++ /dev/null @@ -1,24 +0,0 @@ -package sniff - -import ( - "github.com/google/gopacket" - "github.com/google/gopacket/pcap" -) - -// Source describes a packet data source that can be terminated. -type Source interface { - gopacket.ZeroCopyPacketDataSource - Close() -} - -const ( - snaplen = 65535 - promisc = true - timeout = pcap.BlockForever -) - -// NewSource returns a live packet data source via the passed device -// (interface). -func NewSource(device string) (Source, error) { - return pcap.OpenLive(device, snaplen, promisc, timeout) -} diff --git a/experimental/sniff/testclient/main.go b/experimental/sniff/testclient/main.go deleted file mode 100644 index a1eb9b343..000000000 --- a/experimental/sniff/testclient/main.go +++ /dev/null @@ -1,91 +0,0 @@ -package main - -import ( - "flag" - "io" - "log" - "time" - - "github.com/google/gopacket" - "github.com/google/gopacket/layers" - "github.com/google/gopacket/pcap" -) - -func main() { - var ( - device = flag.String("device", "eth0", "device to sniff") - ) - flag.Parse() - - const ( - snaplen = 1024 * 1024 - promisc = true - timeout = pcap.BlockForever - ) - handle, err := pcap.OpenLive(*device, snaplen, promisc, timeout) - if err != nil { - log.Fatal(err) - } - - go func() { - time.Sleep(5 * time.Second) - handle.Close() - }() - - var ( - eth layers.Ethernet - ip4 layers.IPv4 - ip6 layers.IPv6 - tcp layers.TCP - udp layers.UDP - icmp4 layers.ICMPv4 - icmp6 layers.ICMPv6 - ) - parser := gopacket.NewDecodingLayerParser( - layers.LayerTypeEthernet, - ð, &ip4, &ip6, &tcp, &udp, &icmp4, &icmp6, - ) - decoded := []gopacket.LayerType{} - - done := make(chan struct{}) - go func() { - defer close(done) - for { - data, ci, err := handle.ZeroCopyReadPacketData() - if err == io.EOF { - log.Print("read: EOF") - return - } - if err != nil { - log.Printf("read: %v", err) - continue - } - log.Println(ci.Timestamp.String()) - err = parser.DecodeLayers(data, &decoded) - if err != nil { - log.Printf("Error in DecodeLayers: %v", err) - continue - } - for _, t := range decoded { - switch t { - case layers.LayerTypeEthernet: - log.Println(" Ethernet", eth.EthernetType, eth.SrcMAC, eth.DstMAC, eth.Length) - case layers.LayerTypeIPv6: - log.Println(" IP6", ip6.Version, ip6.SrcIP, ip6.DstIP, ip6.Length, ip6.TrafficClass) - case layers.LayerTypeIPv4: - log.Println(" IP4", ip4.Version, ip4.SrcIP, ip4.DstIP, ip4.Length, ip4.TTL, ip4.TOS) - case layers.LayerTypeTCP: - log.Println(" TCP", tcp.SrcPort, tcp.DstPort, tcp.Seq, tcp.Ack, tcp.Window) - case layers.LayerTypeUDP: - log.Println(" UDP", udp.SrcPort, udp.DstPort, udp.Length) - case layers.LayerTypeICMPv4: - log.Println(" ICMP4", icmp4.Id, icmp4.Seq) - case layers.LayerTypeICMPv6: - log.Println(" ICMP6") - } - } - log.Println() - } - }() - <-done -} diff --git a/experimental/tracer/.gitignore b/experimental/tracer/.gitignore deleted file mode 100644 index 681fc6b1d..000000000 --- a/experimental/tracer/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -main/main -tracer.tar -main/static.go diff --git a/experimental/tracer/Makefile b/experimental/tracer/Makefile deleted file mode 100644 index 3f0cfa658..000000000 --- a/experimental/tracer/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -BUILD_IN_CONTAINER=true - -tracer.tar: main/main main/Dockerfile - docker build -t tomwilkie/tracer main/ - docker save tomwilkie/tracer:latest >$@ - -main/main: main/*.go main/static.go ptrace/*.go - -ifeq ($(BUILD_IN_CONTAINER),true) - -main/main: - docker run -ti \ - -v $(shell pwd)/../../:/go/src/github.com/weaveworks/scope \ - -e GOARCH -e GOOS -e CIRCLECI -e CIRCLE_BUILD_NUM -e CIRCLE_NODE_TOTAL \ - -e CIRCLE_NODE_INDEX -e COVERDIR -e SLOW \ - weaveworks/scope-backend-build SCOPE_VERSION=$(SCOPE_VERSION) GO_BUILD_INSTALL_DEPS=$(GO_BUILD_INSTALL_DEPS) -C experimental/tracer $@ - -else - -main/main: - #go get -tags netgo ./$(@D) - go build -ldflags "-extldflags \"-static\"" -tags netgo -o $@ ./$(@D) - -endif - -main/static.go: ui/* - esc -o main/static.go -prefix ui ui - -clean: - go clean ./.. - rm -f main/static.go tracer.tar main/main diff --git a/experimental/tracer/README.md b/experimental/tracer/README.md deleted file mode 100644 index cba9e7f6f..000000000 --- a/experimental/tracer/README.md +++ /dev/null @@ -1,15 +0,0 @@ -Tracer is an prototype for doing container-centric distributed request tracing without applications modifications. - -It its very early. Ask Tom for a demo. - -Run tracer: -- make -- ./tracer.sh start - -TODO: -- need to stich traces together -- deal with persistent connections -- make it work for goroutines -- test with jvm based app -- find way to get local ip address for an incoming connection -- make the container/process trace start/stop more reliable diff --git a/experimental/tracer/main/Dockerfile b/experimental/tracer/main/Dockerfile deleted file mode 100644 index c9555cb51..000000000 --- a/experimental/tracer/main/Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM gliderlabs/alpine -MAINTAINER Weaveworks Inc -WORKDIR /home/weave -COPY ./main /home/weave/ -EXPOSE 4050 -ENTRYPOINT ["/home/weave/main"] diff --git a/experimental/tracer/main/http.go b/experimental/tracer/main/http.go deleted file mode 100644 index 4029bb573..000000000 --- a/experimental/tracer/main/http.go +++ /dev/null @@ -1,150 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "log" - "mime" - "net/http" - "strconv" - "strings" - - "github.com/gorilla/mux" - - "github.com/weaveworks/scope/probe/docker" - "github.com/weaveworks/scope/probe/process" -) - -func respondWith(w http.ResponseWriter, code int, response interface{}) { - w.Header().Set("Content-Type", "application/json") - w.Header().Add("Cache-Control", "no-cache") - w.WriteHeader(code) - if err := json.NewEncoder(w).Encode(response); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - log.Printf("Error handling http request: %v", err.Error()) - } -} - -func (t *tracer) pidsForContainer(id string) ([]int, error) { - var container docker.Container - t.docker.WalkContainers(func(c docker.Container) { - if c.ID() == id { - container = c - } - }) - - if container == nil { - return []int{}, fmt.Errorf("Not Found") - } - - pidTree, err := process.NewTree(process.NewWalker("/proc")) - if err != nil { - return []int{}, err - } - - return pidTree.GetChildren(container.PID()) -} - -// Container is the type exported by the HTTP API. -type Container struct { - ID string - Name string - PIDs []int -} - -func (t *tracer) http(port int) { - router := mux.NewRouter() - - router.Methods("GET").Path("/container").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - pidTree, err := process.NewTree(process.NewWalker("/proc")) - if err != nil { - respondWith(w, http.StatusBadRequest, err.Error()) - return - } - - containers := []Container{} - t.docker.WalkContainers(func(container docker.Container) { - children, _ := pidTree.GetChildren(container.PID()) - out := Container{ - Name: strings.TrimPrefix(container.Container().Name, "/"), - ID: container.ID(), - PIDs: children, - } - containers = append(containers, out) - }) - - respondWith(w, http.StatusOK, containers) - }) - - router.Methods("POST").Path("/container/{id}").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - id := mux.Vars(r)["id"] - children, err := t.pidsForContainer(id) - if err != nil { - respondWith(w, http.StatusBadRequest, err.Error()) - return - } - - for _, pid := range children { - t.ptrace.TraceProcess(pid) - } - w.WriteHeader(204) - }) - - router.Methods("DELETE").Path("/container/{id}").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - id := mux.Vars(r)["id"] - children, err := t.pidsForContainer(id) - if err != nil { - respondWith(w, http.StatusBadRequest, err.Error()) - return - } - - for _, pid := range children { - t.ptrace.StopTracing(pid) - } - w.WriteHeader(204) - }) - - router.Methods("GET").Path("/pid").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - respondWith(w, http.StatusOK, t.ptrace.AttachedPIDs()) - }) - - router.Methods("POST").Path("/pid/{pid:\\d+}").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - pid, err := strconv.Atoi(mux.Vars(r)["pid"]) - if err != nil { - respondWith(w, http.StatusBadRequest, err.Error()) - return - } - - t.ptrace.TraceProcess(pid) - w.WriteHeader(204) - }) - - router.Methods("DELETE").Path("/pid/{pid:\\d+}").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - pid, err := strconv.Atoi(mux.Vars(r)["pid"]) - if err != nil { - respondWith(w, http.StatusBadRequest, err.Error()) - return - } - - t.ptrace.StopTracing(pid) - w.WriteHeader(204) - }) - - router.Methods("GET").Path("/traces").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - respondWith(w, http.StatusOK, t.store.Traces()) - }) - - mime.AddExtensionType(".svg", "image/svg+xml") - - router.Methods("GET").PathPrefix("/").Handler(http.FileServer(FS(false))) // everything else is static - - log.Printf("Launching HTTP API on port %d", port) - srv := &http.Server{ - Addr: fmt.Sprintf(":%d", port), - Handler: router, - } - - if err := srv.ListenAndServe(); err != nil { - log.Printf("Unable to create http listener: %v", err) - } -} diff --git a/experimental/tracer/main/main.go b/experimental/tracer/main/main.go deleted file mode 100644 index 29408bd00..000000000 --- a/experimental/tracer/main/main.go +++ /dev/null @@ -1,70 +0,0 @@ -package main - -import ( - "log" - _ "net/http/pprof" - "os" - "os/signal" - "runtime" - "syscall" - "time" - - "github.com/weaveworks/scope/experimental/tracer/ptrace" - "github.com/weaveworks/scope/probe/docker" -) - -const ( - procRoot = "/proc" - pollInterval = 10 * time.Second -) - -type tracer struct { - ptrace ptrace.PTracer - store *store - docker docker.Registry -} - -func (t *tracer) Stop() { - log.Printf("Shutting down...") - t.ptrace.Stop() - t.docker.Stop() - log.Printf("Done.") -} - -func main() { - dockerRegistry, err := docker.NewRegistry(pollInterval, nil, false, "") - if err != nil { - log.Fatalf("Could start docker watcher: %v", err) - } - - store := newStore() - tracer := tracer{ - store: store, - ptrace: ptrace.NewPTracer(store), - docker: dockerRegistry, - } - defer tracer.Stop() - - go tracer.http(6060) - <-handleSignals() -} - -func handleSignals() chan struct{} { - quit := make(chan struct{}, 10) - go func() { - sigs := make(chan os.Signal, 1) - signal.Notify(sigs, syscall.SIGQUIT, syscall.SIGINT, syscall.SIGTERM) - buf := make([]byte, 1<<20) - for { - sig := <-sigs - switch sig { - case syscall.SIGINT, syscall.SIGTERM: - quit <- struct{}{} - case syscall.SIGQUIT: - stacklen := runtime.Stack(buf, true) - log.Printf("=== received SIGQUIT ===\n*** goroutine dump...\n%s\n*** end\n", buf[:stacklen]) - } - } - }() - return quit -} diff --git a/experimental/tracer/main/store.go b/experimental/tracer/main/store.go deleted file mode 100644 index 7dbbe5a28..000000000 --- a/experimental/tracer/main/store.go +++ /dev/null @@ -1,180 +0,0 @@ -package main - -import ( - "fmt" - "math/rand" - "sort" - "sync" - - "github.com/msackman/skiplist" - - "github.com/weaveworks/scope/experimental/tracer/ptrace" -) - -const epsilon = int64(5) * 1000 // milliseconds - -// Traces are indexed by from addr, from port, and start time. -type key struct { - fromAddr uint32 - fromPort uint16 - startTime int64 -} - -func (k key) MarshalJSON() ([]byte, error) { - return []byte(fmt.Sprintf("\"%x.%x.%x\"", k.fromAddr, k.fromPort, k.startTime)), nil -} - -type trace struct { - PID int - Key key - ServerDetails *ptrace.ConnectionDetails - ClientDetails *ptrace.ConnectionDetails - Children []*trace - Level int -} - -type byKey []*trace - -func (a byKey) Len() int { return len(a) } -func (a byKey) Swap(i, j int) { a[i], a[j] = a[j], a[i] } -func (a byKey) Less(i, j int) bool { return a[i].Key.startTime < a[j].Key.startTime } - -type store struct { - sync.RWMutex - traces *skiplist.SkipList -} - -func newKey(fd *ptrace.Fd) key { - var fromAddr uint32 - for _, b := range fd.FromAddr.To4() { - fromAddr <<= 8 - fromAddr |= uint32(b) - } - - return key{fromAddr, fd.FromPort, fd.Start} -} - -func (k key) LessThan(other skiplist.Comparable) bool { - r := other.(key) - - if k.fromAddr != r.fromAddr { - return k.fromAddr > r.fromAddr - } - - if k.fromPort != r.fromPort { - return k.fromPort < r.fromPort - } - - if k.Equal(other) { - return false - } - - return k.startTime < r.startTime -} - -func (k key) Equal(other skiplist.Comparable) bool { - r := other.(key) - if k.fromAddr != r.fromAddr || k.fromPort != r.fromPort { - return false - } - - diff := k.startTime - r.startTime - return -epsilon < diff && diff < epsilon -} - -func newStore() *store { - return &store{traces: skiplist.New(rand.New(rand.NewSource(0)))} -} - -func (t *trace) addChild(child *trace) { - // find the child we're supposed to be replacing - for i, candidate := range t.Children { - if !candidate.Key.Equal(skiplist.Comparable(child.Key)) { - continue - } - - // Fix up some fields - child.ClientDetails = candidate.ClientDetails - IncrementLevel(child, t.Level+1) - - // Overwrite old record - t.Children[i] = child - return - } -} - -func (s *store) RecordConnection(pid int, connection *ptrace.Fd) { - s.Lock() - defer s.Unlock() - - newTrace := &trace{ - PID: pid, - Key: newKey(connection), - ServerDetails: &connection.ConnectionDetails, - } - for _, child := range connection.Children { - newTrace.Children = append(newTrace.Children, &trace{ - Level: 1, - Key: newKey(child), - ClientDetails: &child.ConnectionDetails, - }) - } - - // First, see if this new conneciton is a child of an existing connection. - // This indicates we have a parent connection to attach to. - // If not, insert this connection. - if parentNode := s.traces.Get(newTrace.Key); parentNode != nil { - parentTrace := parentNode.Value.(*trace) - parentTrace.addChild(newTrace) - parentNode.Remove() - } else { - s.traces.Insert(newTrace.Key, newTrace) - } - - // Next, see if we already know about the child connections - // If not, insert each of our children. - for _, child := range newTrace.Children { - if childNode := s.traces.Get(child.Key); childNode != nil { - childTrace := childNode.Value.(*trace) - newTrace.addChild(childTrace) - childNode.Remove() - } else { - s.traces.Insert(child.Key, newTrace) - } - } -} - -// IncrementLevel ... -func IncrementLevel(trace *trace, increment int) { - trace.Level += increment - for _, child := range trace.Children { - IncrementLevel(child, increment) - } -} - -func (s *store) Traces() []*trace { - s.RLock() - defer s.RUnlock() - - traces := []*trace{} - var cur = s.traces.First() - for cur != nil { - key := cur.Key.(key) - trace := cur.Value.(*trace) - if trace.Key == key { - traces = append(traces, trace) - } - cur = cur.Next() - } - - sort.Sort(byKey(traces)) - - // only return last 15 traces - start := 0 - if len(traces) > 15 { - start = len(traces) - 15 - } - traces = traces[start:] - - return traces -} diff --git a/experimental/tracer/ptrace/fd.go b/experimental/tracer/ptrace/fd.go deleted file mode 100644 index 463a35628..000000000 --- a/experimental/tracer/ptrace/fd.go +++ /dev/null @@ -1,198 +0,0 @@ -package ptrace - -import ( - "bufio" - "encoding/hex" - "fmt" - "net" - "os" - "regexp" - "strconv" - "time" -) - -const ( - listening = iota - incoming - outgoing -) - -const ( - socketPattern = `^socket:\[(\d+)\]$` - tcpPattern = `^\s*(?P\d+): (?P[A-F0-9]{8}):(?P[A-F0-9]{4}) ` + - `(?P[A-F0-9]{8}):(?P[A-F0-9]{4}) (?:[A-F0-9]{2}) (?:[A-F0-9]{8}):(?:[A-F0-9]{8}) ` + - `(?:[A-F0-9]{2}):(?:[A-F0-9]{8}) (?:[A-F0-9]{8}) \s+(?:\d+) \s+(?:\d+) (?P\d+)` -) - -var ( - socketRegex = regexp.MustCompile(socketPattern) - tcpRegexp = regexp.MustCompile(tcpPattern) -) - -// ConnectionDetails ... -type ConnectionDetails struct { - direction int - - Start int64 - Stop int64 - sent int64 - received int64 - - FromAddr net.IP - FromPort uint16 - ToAddr net.IP - ToPort uint16 -} - -// Fd represents a connect and subsequent connections caused by it. -type Fd struct { - fd int - closed bool - - ConnectionDetails - - // Fds are connections, and can have a causal-link to other Fds - Children []*Fd -} - -func getLocalAddr(pid, fd int) (addr net.IP, port uint16, err error) { - var ( - socket string - match []string - inode int - tcpFile *os.File - scanner *bufio.Scanner - candidate int - port64 int64 - ) - - socket, err = os.Readlink(fmt.Sprintf("/proc/%d/fd/%d", pid, fd)) - if err != nil { - return - } - - match = socketRegex.FindStringSubmatch(socket) - if match == nil { - err = fmt.Errorf("Fd %d not a socket", fd) - return - } - - inode, err = strconv.Atoi(match[1]) - if err != nil { - return - } - - tcpFile, err = os.Open(fmt.Sprintf("/proc/%d/net/tcp", pid)) - if err != nil { - return - } - defer tcpFile.Close() - - scanner = bufio.NewScanner(tcpFile) - for scanner.Scan() { - match = tcpRegexp.FindStringSubmatch(scanner.Text()) - if match == nil { - continue - } - - candidate, err = strconv.Atoi(match[6]) - if err != nil { - return - } - if candidate != inode { - continue - } - - addr = make([]byte, 4) - if _, err = hex.Decode(addr, []byte(match[2])); err != nil { - return - } - addr[0], addr[1], addr[2], addr[3] = addr[3], addr[2], addr[1], addr[0] - - // use a 32 bit int for target, at the result is a uint16 - port64, err = strconv.ParseInt(match[3], 16, 32) - if err != nil { - return - } - port = uint16(port64) - - return - } - - if err = scanner.Err(); err != nil { - return - } - - err = fmt.Errorf("Fd %d not found for proc %d", fd, pid) - return -} - -// in milliseconds -func now() int64 { - return time.Now().UnixNano() / 1000000 -} - -// We want to get the listening address from /proc -func newListeningFd(pid, fd int) (*Fd, error) { - localAddr, localPort, err := getLocalAddr(pid, fd) - if err != nil { - return nil, err - } - - return &Fd{ - fd: fd, - - ConnectionDetails: ConnectionDetails{ - direction: listening, - Start: now(), - ToAddr: localAddr, - ToPort: uint16(localPort), - }, - }, nil -} - -// We intercepted a connect syscall -func newConnectionFd(pid, fd int, remoteAddr net.IP, remotePort uint16) (*Fd, error) { - localAddr, localPort, err := getLocalAddr(pid, fd) - if err != nil { - return nil, err - } - - return &Fd{ - fd: fd, - - ConnectionDetails: ConnectionDetails{ - direction: outgoing, - Start: now(), - FromAddr: localAddr, - FromPort: uint16(localPort), - ToAddr: remoteAddr, - ToPort: remotePort, - }, - }, nil -} - -// We got a new connection on a listening socket -func (fd *Fd) newConnection(addr net.IP, port uint16, newFd int) (*Fd, error) { - if fd.direction != listening { - return nil, fmt.Errorf("New connection on non-listening fd!") - } - - return &Fd{ - fd: newFd, - - ConnectionDetails: ConnectionDetails{ - direction: incoming, - Start: now(), - ToAddr: fd.ToAddr, - ToPort: fd.ToPort, - FromAddr: addr, - FromPort: port, - }, - }, nil -} - -func (fd *Fd) close() { - fd.closed = true - fd.Stop = now() -} diff --git a/experimental/tracer/ptrace/process.go b/experimental/tracer/ptrace/process.go deleted file mode 100644 index 6add841c7..000000000 --- a/experimental/tracer/ptrace/process.go +++ /dev/null @@ -1,99 +0,0 @@ -package ptrace - -import ( - "fmt" - "io/ioutil" - "log" - "strconv" - "sync" -) - -type process struct { - sync.Mutex - pid int - - detaching bool - detached chan struct{} - - tracer *PTracer - threads map[int]*thread - fds map[int]*Fd -} - -func newProcess(pid int, tracer *PTracer) *process { - return &process{ - pid: pid, - tracer: tracer, - threads: make(map[int]*thread), - fds: make(map[int]*Fd), - detached: make(chan struct{}), - } -} - -func (p *process) trace() { - go p.loop() -} - -// This doesn't actually guarantees we follow all the threads. Oops. -func (p *process) loop() { - var ( - attached int - ) - log.Printf("Tracing process %d", p.pid) - - for { - ps, err := ioutil.ReadDir(fmt.Sprintf("/proc/%d/task", p.pid)) - if err != nil { - log.Printf("ReadDir failed, pid=%d, err=%v", p.pid, err) - return - } - - attached = 0 - for _, file := range ps { - pid, err := strconv.Atoi(file.Name()) - if err != nil { - log.Printf("'%s' is not a pid: %v", file.Name(), err) - attached++ - continue - } - - p.Lock() - t, ok := p.threads[pid] - if !ok { - t = p.tracer.traceThread(pid, p) - p.threads[pid] = t - } - p.Unlock() - - if !t.attached { - continue - } - - attached++ - } - - // When we successfully attach to all threads - // we can be sure to catch new clones, so we - // can quit. - if attached == len(ps) { - break - } - } - - log.Printf("Successfully attached to %d threads", attached) -} - -func (p *process) newThread(thread *thread) { - p.Lock() - defer p.Unlock() - p.threads[thread.tid] = thread -} - -func (p *process) newFd(fd *Fd) error { - _, ok := p.fds[fd.fd] - if ok { - return fmt.Errorf("New fd %d, alread exists!", fd.fd) - } - p.fds[fd.fd] = fd - return nil -} diff --git a/experimental/tracer/ptrace/ptracer.go b/experimental/tracer/ptrace/ptracer.go deleted file mode 100644 index 5d8a5db64..000000000 --- a/experimental/tracer/ptrace/ptracer.go +++ /dev/null @@ -1,337 +0,0 @@ -package ptrace - -import ( - "bufio" - "fmt" - "log" - "os" - "runtime" - "strconv" - "strings" - "syscall" -) - -const ( - ptraceOptions = syscall.PTRACE_O_TRACESYSGOOD | syscall.PTRACE_O_TRACECLONE - ptraceTracesysgoodBit = 0x80 -) - -// Store ... -type Store interface { - RecordConnection(int, *Fd) -} - -// PTracer ptrace processed and threads -type PTracer struct { - - // All ptrace calls must come from the - // same thread. So we wait on a separate - // thread. - ops chan func() - stopped chan stopped - quit chan struct{} - childAttached chan struct{} //used to signal the wait loop - - threads map[int]*thread - processes map[int]*process - store Store -} - -type stopped struct { - pid int - status syscall.WaitStatus -} - -// NewPTracer creates a new ptracer. -func NewPTracer(store Store) PTracer { - t := PTracer{ - ops: make(chan func()), - stopped: make(chan stopped), - quit: make(chan struct{}), - childAttached: make(chan struct{}), - - threads: make(map[int]*thread), - processes: make(map[int]*process), - store: store, - } - go t.waitLoop() - go t.loop() - return t -} - -// Stop stop stop -func (t *PTracer) Stop() { - out := make(chan []int) - t.ops <- func() { - pids := []int{} - for pid := range t.processes { - pids = append(pids, pid) - } - out <- pids - } - for _, pid := range <-out { - t.StopTracing(pid) - } - t.quit <- struct{}{} -} - -// TraceProcess starts tracing the given pid -func (t *PTracer) TraceProcess(pid int) { - result := make(chan struct{}) - t.ops <- func() { - process := newProcess(pid, t) - t.processes[pid] = process - process.trace() - result <- struct{}{} - } - <-result - return -} - -// StopTracing stops tracing all threads for the given pid -func (t *PTracer) StopTracing(pid int) error { - log.Printf("Detaching from %d", pid) - - errors := make(chan error) - processes := make(chan *process) - - t.ops <- func() { - // send sigstop to all threads - process, ok := t.processes[pid] - if !ok { - errors <- fmt.Errorf("PID %d not found", pid) - return - } - - // This flag tells the thread to detach when it next stops - process.detaching = true - - // Now send sigstop to all threads. - for _, thread := range process.threads { - log.Printf("sending SIGSTOP to %d", thread.tid) - if err := syscall.Tgkill(pid, thread.tid, syscall.SIGSTOP); err != nil { - errors <- err - return - } - } - - processes <- process - } - - select { - case err := <-errors: - return err - case process := <-processes: - <-process.detached - return nil - } -} - -// AttachedPIDs list the currently attached processes. -func (t *PTracer) AttachedPIDs() []int { - result := make(chan []int) - t.ops <- func() { - var pids []int - for pid := range t.processes { - pids = append(pids, pid) - } - result <- pids - } - return <-result -} - -func (t *PTracer) traceThread(pid int, process *process) *thread { - result := make(chan *thread) - t.ops <- func() { - thread := newThread(pid, process, t) - t.threads[pid] = thread - - err := syscall.PtraceAttach(pid) - if err != nil { - log.Printf("Attach %d failed: %v", pid, err) - return - } - - result <- thread - - select { - case t.childAttached <- struct{}{}: - default: - } - } - return <-result -} - -func (t *PTracer) waitLoop() { - var ( - status syscall.WaitStatus - pid int - err error - ) - - for { - //log.Printf("Waiting...") - pid, err = syscall.Wait4(-1, &status, syscall.WALL, nil) - if err != nil && err.(syscall.Errno) == syscall.ECHILD { - //log.Printf( "No children to wait4") - <-t.childAttached - continue - } - if err != nil { - log.Printf(" Wait failed: %v %d", err, err.(syscall.Errno)) - return - } - //log.Printf(" PID %d stopped with signal %#x", pid, status) - t.stopped <- stopped{pid, status} - } -} - -func (t *PTracer) loop() { - runtime.LockOSThread() - - for { - select { - case op := <-t.ops: - op() - case stopped := <-t.stopped: - t.handleStopped(stopped.pid, stopped.status) - case <-t.quit: - return - } - } -} - -func (t *PTracer) handleStopped(pid int, status syscall.WaitStatus) { - signal := syscall.Signal(0) - target, err := t.thread(pid) - if err != nil { - log.Printf("thread failed: %v", err) - return - } - - if !target.attached { - target.attached = true - - err = syscall.PtraceSetOptions(pid, ptraceOptions) - if err != nil { - log.Printf("SetOptions failed, pid=%d, err=%v", pid, err) - return - } - - } else if status.Stopped() && status.StopSignal() == syscall.SIGTRAP|ptraceTracesysgoodBit { - // pid entered Syscall-enter-stop or syscall-exit-stop - target.syscallStopped() - - } else if status.Stopped() && status.StopSignal() == syscall.SIGTRAP { - // pid entered PTRACE_EVENT stop - switch status.TrapCause() { - case syscall.PTRACE_EVENT_CLONE: - err := target.handleClone(pid) - if err != nil { - log.Printf("clone failed: %v", err) - return - } - default: - log.Printf("Unknown PTRACE_EVENT %d for pid %d", status.TrapCause(), pid) - } - } else if status.Exited() || status.Signaled() { - // "tracer can safely assume pid will exit" - t.threadExited(target) - return - } else if status.Stopped() { - // tracee received a non-trace related signal - signal = status.StopSignal() - - if signal == syscall.SIGSTOP && target.process.detaching { - t.detachThread(target) - return - } - } else { - // unknown stop - shouldn't happen! - log.Printf("Pid %d random stop with status %x", pid, status) - } - - // Restart stopped caller in syscall trap mode. - // log.Printf("Restarting pid %d with signal %d", pid, int(signal)) - err = syscall.PtraceSyscall(pid, int(signal)) - if err != nil { - log.Printf("PtraceSyscall failed, pid=%d, err=%v", pid, err) - } -} - -func (t *PTracer) detachThread(thread *thread) { - syscall.PtraceDetach(thread.tid) - process := thread.process - delete(process.threads, thread.tid) - delete(t.threads, thread.tid) - if len(process.threads) == 0 { - delete(t.processes, process.pid) - close(process.detached) - log.Printf("Process %d detached", process.pid) - } -} - -func pidForTid(tid int) (pid int, err error) { - var ( - status *os.File - scanner *bufio.Scanner - splits []string - ) - - status, err = os.Open(fmt.Sprintf("/proc/%d/status", tid)) - if err != nil { - return - } - defer status.Close() - - scanner = bufio.NewScanner(status) - for scanner.Scan() { - splits = strings.Split(scanner.Text(), ":") - if splits[0] != "Tgid" { - continue - } - - pid, err = strconv.Atoi(strings.TrimSpace(splits[1])) - return - } - - if err = scanner.Err(); err != nil { - return - } - - err = fmt.Errorf("Pid not found for proc %d", tid) - return -} - -func (t *PTracer) thread(tid int) (*thread, error) { - // unfortunately we can't propage fd affinitiy as we - // can reliably determin who clone'd new threads, as - // the pids returned by the ptrace calls are in the process' - // namespace, not ours. - - thread, ok := t.threads[tid] - if !ok { - pid, err := pidForTid(tid) - if err != nil { - return nil, err - } - - proc, ok := t.processes[pid] - if !ok { - return nil, fmt.Errorf("Got new thread %d for unknown process", tid) - } - - thread = newThread(tid, proc, t) - t.threads[tid] = thread - log.Printf("New thread reported, tid=%d, pid=%d", tid, pid) - } - return thread, nil -} - -func (t *PTracer) threadExited(thread *thread) { - thread.handleExit() - delete(t.threads, thread.tid) - if thread.process != nil { - delete(thread.process.threads, thread.tid) - } -} diff --git a/experimental/tracer/ptrace/thread.go b/experimental/tracer/ptrace/thread.go deleted file mode 100644 index 5a7b2dfad..000000000 --- a/experimental/tracer/ptrace/thread.go +++ /dev/null @@ -1,291 +0,0 @@ -package ptrace - -import ( - "fmt" - "log" - "net" - "syscall" - "unsafe" -) - -// Syscall numbers -const ( - READ = 0 - WRITE = 1 - OPEN = 2 - CLOSE = 3 - STAT = 4 - MMAP = 9 - MPROTECT = 10 - MUNMAP = 11 - SELECT = 23 - MADVISE = 28 - SOCKET = 41 - CONNECT = 42 - ACCEPT = 43 - SENDTO = 44 - RECVFROM = 45 - SHUTDOWN = 48 - CLONE = 56 - GETTIMEOFDAY = 96 - GETID = 186 - FUTEX = 202 - SETROBUSTLIST = 273 - ACCEPT4 = 288 -) - -// States for a given thread -const ( - NORMAL = iota - INSYSCALL -) - -type thread struct { - tid int - attached bool - process *process // might be nil! - tracer *PTracer - - state int - callRegs syscall.PtraceRegs - resultRegs syscall.PtraceRegs - - currentIncoming map[int]*Fd - currentOutgoing map[int]*Fd - closedOutgoing []*Fd -} - -func newThread(pid int, process *process, tracer *PTracer) *thread { - t := &thread{ - tid: pid, - process: process, - tracer: tracer, - currentIncoming: map[int]*Fd{}, - currentOutgoing: map[int]*Fd{}, - } - return t -} - -// trace thread calls this -func (t *thread) syscallStopped() { - var err error - - if t.state == NORMAL { - if err = syscall.PtraceGetRegs(t.tid, &t.callRegs); err != nil { - t.logf("GetRegs failed, pid=%d, err=%v", t.tid, err) - } - t.state = INSYSCALL - return - } - - t.state = NORMAL - - if err = syscall.PtraceGetRegs(t.tid, &t.resultRegs); err != nil { - t.logf("GetRegs failed, pid=%d, err=%v", t.tid, err) - return - } - - if t.process == nil { - t.logf("Got syscall, but don't know parent process!") - return - } - - switch t.callRegs.Orig_rax { - case ACCEPT, ACCEPT4: - t.handleAccept(&t.callRegs, &t.resultRegs) - - case CLOSE: - t.handleClose(&t.callRegs, &t.resultRegs) - - case CONNECT: - t.handleConnect(&t.callRegs, &t.resultRegs) - - case READ, WRITE, RECVFROM, SENDTO: - t.handleIO(&t.callRegs, &t.resultRegs) - - // we can ignore these syscalls - case SETROBUSTLIST, GETID, MMAP, MPROTECT, MADVISE, SOCKET, CLONE, STAT, SELECT: - return - - case OPEN, FUTEX, SHUTDOWN, GETTIMEOFDAY, MUNMAP: - return - - default: - t.logf("syscall(%d)", t.callRegs.Orig_rax) - } -} - -func ntohl(b uint16) uint16 { - return (b << 8) | ((b & 0xff00) >> 8) -} - -func (t *thread) getSocketAddress(ptr uintptr) (addr net.IP, port uint16, err error) { - var ( - buf = make([]byte, syscall.SizeofSockaddrAny) - read int - ) - - if ptr == 0 { - err = fmt.Errorf("Null ptr") - return - } - - read, err = syscall.PtracePeekData(t.tid, ptr, buf) - if read != syscall.SizeofSockaddrAny || err != nil { - return - } - - var sockaddr4 = (*syscall.RawSockaddrInet4)(unsafe.Pointer(&buf[0])) - if sockaddr4.Family != syscall.AF_INET { - return - } - - addr = net.IP(sockaddr4.Addr[0:]) - port = ntohl(sockaddr4.Port) - return -} - -func (t *thread) handleAccept(call, result *syscall.PtraceRegs) { - var ( - err error - ok bool - listeningFdNum int - connectionFdNum int - addrPtr uintptr - addr net.IP - port uint16 - listeningFd *Fd - connection *Fd - ) - - listeningFdNum = int(result.Rdi) - connectionFdNum = int(result.Rax) - addrPtr = uintptr(result.Rsi) - addr, port, err = t.getSocketAddress(addrPtr) - if err != nil { - t.logf("failed to read sockaddr: %v", err) - return - } - - listeningFd, ok = t.process.fds[listeningFdNum] - if !ok { - listeningFd, err = newListeningFd(t.process.pid, listeningFdNum) - if err != nil { - t.logf("Failed to read listening port: %v", err) - return - } - t.process.fds[listeningFdNum] = listeningFd - } - - connection, err = listeningFd.newConnection(addr, port, connectionFdNum) - if err != nil { - t.logf("Failed to create connection fd: %v", err) - return - } - - t.process.newFd(connection) - - t.logf("Accepted connection from %s:%d -> %s:%d on fd %d, new fd %d", - addr, port, connection.ToAddr, connection.ToPort, listeningFdNum, connectionFdNum) -} - -func (t *thread) handleConnect(call, result *syscall.PtraceRegs) { - fd := int(result.Rdi) - ptr := result.Rsi - addr, port, err := t.getSocketAddress(uintptr(ptr)) - if err != nil { - t.logf("failed to read sockaddr: %v", err) - return - } - - connection, err := newConnectionFd(t.process.pid, fd, addr, port) - if err != nil { - t.logf("Failed to create connection fd: %v", err) - return - } - - t.process.newFd(connection) - - t.logf("Made connection from %s:%d -> %s:%d on fd %d", - connection.FromAddr, connection.FromPort, - connection.ToAddr, connection.ToPort, fd) -} - -func (t *thread) handleClose(call, result *syscall.PtraceRegs) { - fdNum := int(call.Rdi) - fd, ok := t.process.fds[fdNum] - if !ok { - t.logf("Got close unknown fd %d", fdNum) - return - } - - //t.logf("Closing fd %d", fdNum) - fd.close() - - // if this connection was incoming, add it to 'the registry' - if fd.direction == incoming { - // collect all the outgoing connections this thread has made - // and treat them as caused by this incoming connections - for _, outgoing := range t.currentOutgoing { - //t.logf("Fd %d caused %d", fdNum, outgoing.fd) - fd.Children = append(fd.Children, outgoing) - } - t.currentOutgoing = map[int]*Fd{} - - for _, outgoing := range t.closedOutgoing { - //t.logf("Fd %d caused %d", fdNum, outgoing.fd) - fd.Children = append(fd.Children, outgoing) - } - t.closedOutgoing = []*Fd{} - - t.tracer.store.RecordConnection(t.process.pid, fd) - } - - // now make sure we've remove it from everywhere - delete(t.process.fds, fdNum) - for _, thread := range t.process.threads { - delete(thread.currentIncoming, fdNum) - - if _, ok := thread.currentOutgoing[fdNum]; ok { - thread.closedOutgoing = append(thread.closedOutgoing, fd) - } - delete(thread.currentOutgoing, fdNum) - } -} - -func (t *thread) handleIO(call, result *syscall.PtraceRegs) { - fdNum := int(call.Rdi) - fd, ok := t.process.fds[fdNum] - if !ok { - //t.logf("IO on unknown fd %d", fdNum) - return - } - - if fd.direction == incoming { - //t.logf("IO on incoming connection %d; setting affinity", fdNum) - t.currentIncoming[fdNum] = fd - } else { - //t.logf("IO on outgoing connection %d; setting affinity", fdNum) - t.currentOutgoing[fdNum] = fd - } -} - -func (t *thread) handleClone(pid int) error { - // We can't use the pid in the process, as it may be in a namespace - newPid, err := syscall.PtraceGetEventMsg(pid) - if err != nil { - log.Printf("PtraceGetEventMsg failed: %v", err) - return err - } - - t.logf("New thread clone'd, pid=%d", newPid) - return nil -} - -func (t *thread) handleExit() { - t.logf("Exiting") -} - -func (t *thread) logf(fmt string, args ...interface{}) { - log.Printf("[thread %d] "+fmt, append([]interface{}{t.tid}, args...)...) -} diff --git a/experimental/tracer/tracer b/experimental/tracer/tracer deleted file mode 100755 index 592c9eab1..000000000 --- a/experimental/tracer/tracer +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -set -eu - -usage() { - echo "$0" -} - -PORT=6060 -CONTAINER_NAME=weavetracer -IMAGE_NAME=tomwilkie/tracer - -[ $# -gt 0 ] || usage -COMMAND=$1 -shift 1 - -case "$COMMAND" in - - launch) - docker rm -f $CONTAINER_NAME || true - docker run --privileged --net=host --pid=host -ti -v /var/run/docker.sock:/var/run/docker.sock \ - --name $CONTAINER_NAME $IMAGE_NAME - ;; - - stop) - docker stop $CONTAINER_NAME || true - docker rm $CONTAINER_NAME >/dev/null || true - ;; - - attach) - PID=$1 - if [ -z "${PID##*[!0-9]*}" ]; then - PID=$(pgrep $PID) - fi - curl -X POST http://localhost:$PORT/pid/$PID - ;; - - detach) - PID=$1 - if [ -z "${PID##*[!0-9]*}" ]; then - PID=$(pgrep $PID) - fi - curl -X DELETE http://localhost:$PORT/pid/$PID - ;; - - traces) - curl http://localhost:$PORT/trace - ;; -esac diff --git a/experimental/tracer/ui/.gitignore b/experimental/tracer/ui/.gitignore deleted file mode 100644 index a471811ad..000000000 --- a/experimental/tracer/ui/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -container.json -traces.json -node_modules - diff --git a/experimental/tracer/ui/README.md b/experimental/tracer/ui/README.md deleted file mode 100644 index a2dc141ef..000000000 --- a/experimental/tracer/ui/README.md +++ /dev/null @@ -1,10 +0,0 @@ -Develop UI -########## - -* npm install -* npm start - -`server.js` serves a fake backend. You can add `container.json` and -`traces.json` to this directory to serve them as /traces and /container -respectively. - diff --git a/experimental/tracer/ui/favicon.ico b/experimental/tracer/ui/favicon.ico deleted file mode 100644 index 2d15c780889b9db340d2ce1e5690caf0b66851ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 741 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xjs^IHxc*<-V}JMm|4T>rfB9cm*Y|(-icOn#|NruF{=5JG z!_@!Zz4E^=e^a>o{~YJ}Q@ZtU{ZF;9u z-`~Ig_?vxO)aLAa-kEP?j|7wj~=CRpLQtC%-^`V9xF^4(ayVe`N zYJ4_tZ#(mmr^aq?HDxL;h@Q&s`PKjU`pH{|*xmjv{$X8I?|Epgm_;r3(d3?s`9UH- zI$D~V1v|nwsj|jRF0f})cCq*vW+o?j;_>7UtZokTbT>XU=t*C)n9qM|!|~HXHTha$ z5(l}zc{T5--bF7sCtiM|b#j5afkD&co95ns>*XX8Z||LLEO_Q1N9g}gZHf{H k+xI2J{ugVHXJlh=J9t&!A#mYVV3;#_y85}Sb4q9e0NaU-qW}N^ diff --git a/experimental/tracer/ui/index.html b/experimental/tracer/ui/index.html deleted file mode 100644 index d7d92ef2c..000000000 --- a/experimental/tracer/ui/index.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - Weave Tracer - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/experimental/tracer/ui/logo.svg b/experimental/tracer/ui/logo.svg deleted file mode 100644 index 406732034..000000000 --- a/experimental/tracer/ui/logo.svg +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/experimental/tracer/ui/package.json b/experimental/tracer/ui/package.json deleted file mode 100644 index d2d91d3ed..000000000 --- a/experimental/tracer/ui/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "scope-tracer", - "version": "1.0.0", - "description": "", - "main": "server.js", - "scripts": { - "start": "node server.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "David Kaltschmidt ", - "license": "UNLICENSED", - "devDependencies": { - "express": "^4.13.3" - } -} diff --git a/experimental/tracer/ui/server.js b/experimental/tracer/ui/server.js deleted file mode 100644 index e56d77342..000000000 --- a/experimental/tracer/ui/server.js +++ /dev/null @@ -1,25 +0,0 @@ -var express = require('express') - -var app = express(); - -app.get('/', function(req, res) { - res.sendFile(__dirname + '/index.html'); -}); - -app.get('/container', function(req, res) { - res.sendFile(__dirname + '/container.json'); -}); - -app.get('/traces', function(req, res) { - res.sendFile(__dirname + '/traces.json'); -}); - -app.use(express.static('./')); - -var port = process.env.PORT || 4050; -var server = app.listen(port, function () { - var host = server.address().address; - var port = server.address().port; - - console.log('Scope Tracer UI listening at http://%s:%s', host, port); -}); diff --git a/experimental/tracer/ui/sprintf.min.js b/experimental/tracer/ui/sprintf.min.js deleted file mode 100644 index 1cbc6b6eb..000000000 --- a/experimental/tracer/ui/sprintf.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! sprintf-js | Alexandru Marasteanu (http://alexei.ro/) | BSD-3-Clause */ - -!function(a){function b(){var a=arguments[0],c=b.cache;return c[a]&&c.hasOwnProperty(a)||(c[a]=b.parse(a)),b.format.call(null,c[a],arguments)}function c(a){return Object.prototype.toString.call(a).slice(8,-1).toLowerCase()}function d(a,b){return Array(b+1).join(a)}var e={not_string:/[^s]/,number:/[dief]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fijosuxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[\+\-]/};b.format=function(a,f){var g,h,i,j,k,l,m,n=1,o=a.length,p="",q=[],r=!0,s="";for(h=0;o>h;h++)if(p=c(a[h]),"string"===p)q[q.length]=a[h];else if("array"===p){if(j=a[h],j[2])for(g=f[n],i=0;i=0),j[8]){case"b":g=g.toString(2);break;case"c":g=String.fromCharCode(g);break;case"d":case"i":g=parseInt(g,10);break;case"j":g=JSON.stringify(g,null,j[6]?parseInt(j[6]):0);break;case"e":g=j[7]?g.toExponential(j[7]):g.toExponential();break;case"f":g=j[7]?parseFloat(g).toFixed(j[7]):parseFloat(g);break;case"o":g=g.toString(8);break;case"s":g=(g=String(g))&&j[7]?g.substring(0,j[7]):g;break;case"u":g>>>=0;break;case"x":g=g.toString(16);break;case"X":g=g.toString(16).toUpperCase()}e.json.test(j[8])?q[q.length]=g:(!e.number.test(j[8])||r&&!j[3]?s="":(s=r?"+":"-",g=g.toString().replace(e.sign,"")),l=j[4]?"0"===j[4]?"0":j[4].charAt(1):" ",m=j[6]-(s+g).length,k=j[6]&&m>0?d(l,m):"",q[q.length]=j[5]?s+g+k:"0"===l?s+k+g:k+s+g)}return q.join("")},b.cache={},b.parse=function(a){for(var b=a,c=[],d=[],f=0;b;){if(null!==(c=e.text.exec(b)))d[d.length]=c[0];else if(null!==(c=e.modulo.exec(b)))d[d.length]="%";else{if(null===(c=e.placeholder.exec(b)))throw new SyntaxError("[sprintf] unexpected placeholder");if(c[2]){f|=1;var g=[],h=c[2],i=[];if(null===(i=e.key.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(g[g.length]=i[1];""!==(h=h.substring(i[0].length));)if(null!==(i=e.key_access.exec(h)))g[g.length]=i[1];else{if(null===(i=e.index_access.exec(h)))throw new SyntaxError("[sprintf] failed to parse named argument key");g[g.length]=i[1]}c[2]=g}else f|=2;if(3===f)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");d[d.length]=c}b=b.substring(c[0].length)}return d};var f=function(a,c,d){return d=(c||[]).slice(0),d.splice(0,0,a),b.apply(null,d)};"undefined"!=typeof exports?(exports.sprintf=b,exports.vsprintf=f):(a.sprintf=b,a.vsprintf=f,"function"==typeof define&&define.amd&&define(function(){return{sprintf:b,vsprintf:f}}))}("undefined"==typeof window?this:window); -//# sourceMappingURL=sprintf.min.js.map \ No newline at end of file diff --git a/experimental/tracer/vendor/github.com/msackman/skiplist/LICENSE b/experimental/tracer/vendor/github.com/msackman/skiplist/LICENSE deleted file mode 100644 index 872daf759..000000000 --- a/experimental/tracer/vendor/github.com/msackman/skiplist/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Matthew Sackman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/experimental/tracer/vendor/github.com/msackman/skiplist/README.md b/experimental/tracer/vendor/github.com/msackman/skiplist/README.md deleted file mode 100644 index 4c5f8d87c..000000000 --- a/experimental/tracer/vendor/github.com/msackman/skiplist/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Skiplist implementation for Go. Comes with tests. Currently no docs, -but it's pretty obvious stuff. \ No newline at end of file diff --git a/experimental/tracer/vendor/github.com/msackman/skiplist/skiplist.go b/experimental/tracer/vendor/github.com/msackman/skiplist/skiplist.go deleted file mode 100644 index 4f568f49e..000000000 --- a/experimental/tracer/vendor/github.com/msackman/skiplist/skiplist.go +++ /dev/null @@ -1,429 +0,0 @@ -package skiplist - -import ( - "fmt" - "math" - "math/rand" - "strings" -) - -const ( - p = 0.3 - defaultDepth = 2 -) - -type Comparable interface { - LessThan(Comparable) bool - Equal(Comparable) bool -} - -type SkipList struct { - length uint - terminus *Node - levelProbabilities []float32 - curCapacity uint - curDepth uint - nodes []Node - localRand *rand.Rand -} - -type Node struct { - Key Comparable - Value interface{} - heightRand float32 - prev *Node - nexts []*Node - skiplist *SkipList -} - -func New(rng *rand.Rand) *SkipList { - depth := defaultDepth - - terminus := &Node{ - heightRand: 0, - nexts: make([]*Node, depth), - } - terminus.prev = terminus - for idx := 0; idx < len(terminus.nexts); idx++ { - terminus.nexts[idx] = terminus - } - s := &SkipList{ - length: 0, - terminus: terminus, - curDepth: uint(depth), - localRand: rng, - } - s.levelProbabilities = []float32{p} - terminus.skiplist = s - s.determineCapacity() - - // s.validate() - - return s -} - -func (s *SkipList) determineCapacity() { - base := float64(1.0) / p - capacity := math.Pow(base, float64(s.curDepth)) - s.curCapacity = uint(math.Floor(capacity)) -} - -func (s *SkipList) chooseNumLevels() (float32, int) { - r := s.localRand.Float32() - max := len(s.levelProbabilities) - for idx := 0; idx < max; idx++ { - if r > s.levelProbabilities[idx] { - return r, idx + 1 - } - } - return r, max + 1 -} - -func (s *SkipList) ensureCapacity() { - // defer s.validate() - if s.length < s.curCapacity { - return - } - - threshold := p * s.levelProbabilities[s.curDepth-2] - s.curDepth++ - s.levelProbabilities = append(s.levelProbabilities, threshold) - - s.determineCapacity() - - // cur and next are just used to walk through the list at lvl. prev - // records the last node that made it up to the new level. - cur := s.terminus - lvl := len(cur.nexts) - 1 - prev := cur - for { - next := cur.nexts[lvl] - if cur.heightRand <= threshold { - cur.nexts = append(cur.nexts, s.terminus) - prev.nexts[lvl+1] = cur - prev = cur - } - if next == s.terminus { - break - } else { - cur = next - } - } -} - -func (s *SkipList) getNode() *Node { - l := len(s.nodes) - if l == 0 { - l = int(s.curCapacity) - s.nodes = make([]Node, l) - } - l-- - n := &s.nodes[l] - s.nodes = s.nodes[:l] - return n -} - -func (s *SkipList) getEqOrLessThan(cur *Node, k Comparable, captureDescent bool) (*Node, []*Node) { - // defer s.validate() - - if s.length == 0 { - return s.terminus, nil - } - if cur != s.terminus { - if k.Equal(cur.Key) { - return cur, nil - } - if k.LessThan(cur.Key) { - return s.getEqOrLessThan(s.terminus, k, captureDescent) - } - } - // 1. Travel, not-descending, as far as possible - lvl := len(cur.nexts) - 1 - for { - n := cur.nexts[lvl] - if n == s.terminus { - break - } - if n.Key.LessThan(k) { - cur = n - lvl = len(cur.nexts) - 1 - } else if n.Key.Equal(k) { - return n, nil - } else { - break - } - } - // 2. Now descend as needed - var descent []*Node - if captureDescent { - descent = make([]*Node, lvl+1) - descent[lvl] = cur - } - for lvl--; lvl >= 0; lvl-- { - for { - n := cur.nexts[lvl] - if n == s.terminus { - break - } - if n.Key.LessThan(k) { - cur = n - } else if n.Key.Equal(k) { - return n, descent - } else { - break - } - } - if captureDescent { - descent[lvl] = cur - } - } - return cur, descent -} - -func (s *SkipList) insert(cur *Node, k Comparable, v interface{}, n *Node) *Node { - // defer s.validate() - - // do this first even though we may not need to - if we do it after - // the getEqOrLessThan call, we may break descent. - s.ensureCapacity() - cur, descent := s.getEqOrLessThan(cur, k, true) - if cur != s.terminus && cur.Key.Equal(k) { - cur.Value = v - return cur - } - // We didn't find k, so cur will be the node immediately prior to - // where k should go. - heightRand, height := s.chooseNumLevels() - if n == nil { - n = s.getNode() - } - n.Key = k - n.Value = v - n.heightRand = heightRand - n.nexts = make([]*Node, height) - n.prev = cur - n.skiplist = s - - if len(cur.nexts) >= len(n.nexts) { - for idx := 0; idx < len(n.nexts); idx++ { - n.nexts[idx] = cur.nexts[idx] - cur.nexts[idx] = n - } - } else { - // Descent may capture only part of the path: it may be shorter - // than levels (in the case where the original cur is != - // s.terminus) and we reached the correct location without - // travelling up very far. However, because we didn't find k, we - // know that all the "lower" levels of descent will be populated - // (where "lower" is "closer to [0]"), so we just need to fill in - // the "top". - if len(n.nexts) > len(descent) { - _, extra := s.getEqOrLessThan(s.terminus, descent[len(descent)-1].Key, true) - // Aside: because we know we'll find that Key, all the lower - // indices of extra will be nil. - descent = append(descent, extra[len(descent):]...) - } - for idx := 0; idx < len(n.nexts); idx++ { - n.nexts[idx] = descent[idx].nexts[idx] - descent[idx].nexts[idx] = n - } - } - n._next().prev = n - s.length++ - return n -} - -func (s *SkipList) remove(cur *Node, k Comparable) interface{} { - // defer s.validate() - - n, _ := s.getEqOrLessThan(cur, k, false) - if n == s.terminus || !n.Key.Equal(k) { - return nil - } - s.removeNode(n) - n.nullify() - return n.Value -} - -func (s *SkipList) removeNode(n *Node) { - // defer s.validate() - - p := n.prev - n._next().prev = p - s.length-- - for idx := 0; idx < len(p.nexts) && idx < len(n.nexts); idx++ { - p.nexts[idx] = n.nexts[idx] - } - if len(p.nexts) < len(n.nexts) { - _, descent := s.getEqOrLessThan(s.terminus, p.Key, true) - // because we know we're going to find Key, the lower indices - // of descent will be nil. But we know p == n.prev, so all of - // those pointers will be to n anyway, which we've already - // dealt with in the previous loop. - for idx := len(p.nexts); idx < len(n.nexts); idx++ { - descent[idx].nexts[idx] = n.nexts[idx] - } - } -} - -func (s *SkipList) reposition(cur *Node, k Comparable) { - // defer s.validate() - - needsMove := false - if cur != s.terminus { - if cur.prev != s.terminus && !cur.prev.Key.LessThan(k) { - needsMove = true - } else if n := cur._next(); n != s.terminus && !k.LessThan(n.Key) { - needsMove = true - } - } - if needsMove { - s.removeNode(cur) - cur.Key = k - s.insert(cur.prev, cur.Key, cur.Value, cur) - } -} - -func (s *SkipList) First() *Node { - return s.terminus.Next() -} - -func (s *SkipList) Last() *Node { - return s.terminus.Prev() -} - -func (s *SkipList) Insert(k Comparable, v interface{}) *Node { - return s.insert(s.terminus, k, v, nil) -} - -func (s *SkipList) Get(k Comparable) *Node { - return s.terminus.Get(k) -} - -func (s *SkipList) Remove(k Comparable) interface{} { - return s.remove(s.terminus, k) -} - -func (s *SkipList) Len() uint { - return s.length -} - -// NB: this destroys t. Do not use t after this. -func (s *SkipList) Merge(t *SkipList) { - // defer s.validate() - - cur := s.terminus - for n := t.First(); n != nil; { - m := n.Next() // need to save this out before we destroy it in the insert - cur = s.insert(cur, n.Key, n.Value, n) - n = m - } -} - -func (s *SkipList) validate() { - visited := make(map[*Node]bool, int(s.length)) - cur := s.terminus - visited[cur] = true - l := uint(0) - for { - if cur != s.terminus { - l++ - } - if cur._next().prev != cur { - panic(fmt.Sprintf("Node (%v) has next pointer to %v, which has prev pointer to %v", cur, cur._next(), cur._next().prev)) - } - if cur.prev._next() != cur { - panic(fmt.Sprintf("Node (%v) has prev pointer to %v, which has next pointer to %v", cur, cur.prev, cur.prev._next())) - } - for h, n := range cur.nexts { - if h >= len(n.nexts) { - panic(fmt.Sprintf("Node (%v) has next pointer at level %v pointing down to node (%v) which has %v height", cur, h, n, len(n.nexts))) - } - } - n := cur._next() - if n == s.terminus { - break - } - if visited[n] { - panic(fmt.Sprintf("Node (%v) has next as %v which is already visited!", cur, n)) - } - if cur != s.terminus && !cur.Key.LessThan(n.Key) { - panic(fmt.Sprintf("Node keys in wrong order: expecting %v < %v", cur.Key, n.Key)) - } - if n.prev != cur { - panic(fmt.Sprintf("Node (%v) has next (%v) which does not point back correctly", cur, n)) - } - cur = n - } - if l != s.length { - panic(fmt.Sprintf("length is wrong: counted %v but length is %v", l, s.length)) - } -} - -func (n *Node) Get(k Comparable) *Node { - m, _ := n.skiplist.getEqOrLessThan(n, k, false) - if m != n.skiplist.terminus && m.Key.Equal(k) { - return m - } else { - return nil - } -} - -func (n *Node) Insert(k Comparable, v interface{}) *Node { - return n.skiplist.insert(n, k, v, nil) -} - -func (n *Node) Remove() interface{} { - return n.skiplist.remove(n, n.Key) -} - -func (n *Node) _next() *Node { - return n.nexts[0] -} - -func (n *Node) Next() *Node { - if m := n.nexts[0]; m != n.skiplist.terminus { - return m - } else { - return nil - } -} - -func (n *Node) Prev() *Node { - if m := n.prev; m != n.skiplist.terminus { - return m - } else { - return nil - } -} - -func (n *Node) Reposition(k Comparable) { - n.skiplist.reposition(n, k) -} - -func (n *Node) nullify() { - // this is called when n is removed from the skiplist. It's really - // just to ensure that if someone has a reference to n lying - // around, they can't use it. - n.prev = nil - n.nexts = nil - n.skiplist = nil -} - -func (s *SkipList) String() string { - strs := make([]string, 1, s.length+1) - strs[0] = fmt.Sprint(s.terminus) - for cur := s.terminus._next(); cur != s.terminus; cur = cur._next() { - strs = append(strs, fmt.Sprint(cur)) - } - return fmt.Sprintf("Skiplist of length %v (counted: %v), levelProbabilities %v, and nodes:\n\t[%v]", - s.length, len(strs)-1, s.levelProbabilities, strings.Join(strs, ",\n\t ")) -} - -func (n *Node) String() string { - strs := make([]string, len(n.nexts)) - for idx := 0; idx < len(strs); idx++ { - strs[idx] = fmt.Sprint(n.nexts[idx].Key) - } - return fmt.Sprintf("%v -> %v (nexts: [%v])", n.Key, n.Value, strings.Join(strs, ", ")) -} diff --git a/experimental/tracer/vendor/github.com/msackman/skiplist/skiplist_test.go b/experimental/tracer/vendor/github.com/msackman/skiplist/skiplist_test.go deleted file mode 100644 index 84bf112ed..000000000 --- a/experimental/tracer/vendor/github.com/msackman/skiplist/skiplist_test.go +++ /dev/null @@ -1,315 +0,0 @@ -package skiplist - -import ( - "math/rand" - "os" - "strconv" - "testing" -) - -type intKey int - -func (sk intKey) LessThan(b Comparable) bool { - return sk < b.(intKey) -} - -func (sk intKey) Equal(b Comparable) bool { - return sk == b.(intKey) -} - -const ( - keyValsLen = 1000000 -) - -var ( - rng = rand.New(rand.NewSource(0)) - keyVals = make(map[intKey]string) - indices = make([]intKey, keyValsLen) -) - -func TestAddFromEmptyRoot(t *testing.T) { - for idx := 0; idx < 10; idx++ { - s := New(rng) - for idy := 0; idy < idx; idy++ { - k := indices[idy] - v := keyVals[k] - n := s.Insert(k, v) - if n.Key != k || n.Value != v { - t.Fatal("Key or Value of inserted pair changed!", k, v, n) - } - if m := s.Get(k); n != m { - t.Fatal("Node changed for just inserted value:", n, m) - } - if s.Len() != uint(idy+1) { - t.Fatal("Incorrect length") - } - } - } -} - -func TestAddFromEmptyRel(t *testing.T) { - for idx := 0; idx < 10; idx++ { - s := New(rng) - var n *Node - for idy := 0; idy < idx; idy++ { - k := indices[idy] - v := keyVals[k] - if n == nil { - n = s.Insert(k, v) - } else { - n = n.Insert(k, v) - } - if n.Key != k || n.Value != v { - t.Fatal("Key or Value of inserted pair changed!", k, v, n) - } - if m := n.Get(k); n != m { - t.Fatal("Node changed for just inserted value:", n, m) - } - if p := n.Prev(); p != nil { - if m := p.Get(k); n != m { - t.Fatal("Node changed for just inserted value:", n, m) - } - } - if s.Len() != uint(idy+1) { - t.Fatal("Incorrect length") - } - } - } -} - -func TestDupInsert(t *testing.T) { - s := New(rng) - for idx := 0; idx < 10; idx++ { - for idy := 0; idy < idx; idy++ { - k := indices[idy] - v := keyVals[k] - if n := s.Insert(k, v); n.Key != k || n.Value != v { - t.Fatal("Key or Value of inserted pair changed!", k, v, n) - } - } - } -} - -func TestGetMissingEmpty(t *testing.T) { - s := New(rng) - for idx := 0; idx < 10; idx++ { - k := indices[idx] - if n := s.Get(k); n != nil { - t.Fatal("Expected not to find elem") - } - } -} - -func TestGetMissingNonEmpty(t *testing.T) { - s := New(rng) - for idx := 0; idx < 20; idx++ { - k := indices[idx] - v := keyVals[k] - if idx%2 == 0 { - s.Insert(k, v) - } else { - if n := s.Get(k); n != nil { - t.Fatal("Expected not to find elem") - } - } - } -} - -func TestRemoveRoot(t *testing.T) { - s := New(rng) - for idx := 0; idx < 20; idx++ { - k := indices[idx] - v := keyVals[k] - s.Insert(k, v) - } - for idx := 0; idx < 20; idx++ { - k := indices[idx] - v := keyVals[k] - if u := s.Remove(k); u != v { - t.Fatal("Wrong value returned:", u, v) - } - if int(s.Len()) != 19-idx { - t.Fatal("Wrong length") - } - } -} - -func TestRemoveSelf(t *testing.T) { - s := New(rng) - ns := []*Node{} - for idx := 0; idx < 20; idx++ { - k := indices[idx] - v := keyVals[k] - ns = append(ns, s.Insert(k, v)) - } - for idx, n := range ns { - k := indices[idx] - v := keyVals[k] - if u := n.Remove(); u != v { - t.Fatal("Wrong value returned:", u, v) - } - if int(s.Len()) != len(ns)-idx-1 { - t.Fatal("Wrong length") - } - } -} - -func TestRemoveMissing(t *testing.T) { - s := New(rng) - for idx := 0; idx < 20; idx++ { - k := indices[idx] - v := keyVals[k] - s.Insert(k, v) - } - for idx := 0; idx < 20; idx++ { - for idy := 0; idy < idx; idy++ { - k := indices[idy] - v := keyVals[k] - u := s.Remove(k) - if idy+1 == idx { - if u != v { - t.Fatal("Wrong value returned:", u, v) - } - } else { - if u != nil { - t.Fatal("Wrong value returned - expected nil:", u) - } - } - } - } - if s.Len() != 1 { - t.Fatal("Wrong length") - } -} - -func TestFirstLast(t *testing.T) { - s := New(rng) - if s.First() != nil || s.Last() != nil { - t.Fatal("Expected nil for First and Last on empty list") - } - var min, max intKey - for idx := 0; idx < 200; idx++ { - k := indices[idx] - v := keyVals[k] - s.Insert(k, v) - if idx == 0 { - min, max = k, k - } else { - if k < min { - min = k - } - if k > max { - max = k - } - } - } - if f := s.First(); f.Key != min { - t.Fatal("Did not get minimum key back for first", min, f) - } - if l := s.Last(); l.Key != max { - t.Fatal("Did not get maximum key back for last", max, l) - } -} - -func TestMerge(t *testing.T) { - s0 := New(rng) - s1 := New(rng) - lim := 1000 - for idx := 0; idx < lim; idx++ { - if idx%2 == 0 { - s0.Insert(intKey(idx), idx) - } else { - s1.Insert(intKey(idx), idx) - } - } - s0.Merge(s1) - if int(s0.Len()) != lim { - t.Fatal("Wrong len after merge", s0.Len()) - } - cur := s0.First() - for idx := 0; idx < lim; idx++ { - if cur.Value.(int) != idx { - t.Fatal("Wrong value: ", cur.Value) - } - if cur != s0.Get(cur.Key) { - t.Fatal("Internal failure: ", cur) - } - cur = cur.Next() - } -} - -func TestReposition(t *testing.T) { - s := New(rng) - lim := 200 - for idx := 0; idx < lim; idx++ { - s.Insert(intKey(idx*5), idx) - } - for idx := lim - 1; idx >= 0; idx-- { - n := s.Get(intKey(idx * 5)) - if n == nil { - t.Fatal("Unable to find node") - } - n.Reposition(intKey((idx * 5) - 11)) - } - n := s.First() - for idx := 0; idx < lim; idx++ { - if n.Value != idx { - t.Fatal("Wrong value", idx, n) - } - n = n.Next() - } - if n != nil { - t.Fatal("Too many values!") - } -} - -func BenchmarkAdd08192(b *testing.B) { benchmarkAdd(8192, b) } -func BenchmarkAdd16384(b *testing.B) { benchmarkAdd(16384, b) } -func BenchmarkAdd32768(b *testing.B) { benchmarkAdd(32768, b) } -func BenchmarkAdd65536(b *testing.B) { benchmarkAdd(65536, b) } - -func benchmarkAdd(initial int, b *testing.B) { - s := populate(New(rng), 0, initial) - b.ResetTimer() - populateFast(s, initial, b.N) -} - -func BenchmarkGet08192(b *testing.B) { benchmarkGet(8192, b) } -func BenchmarkGet16384(b *testing.B) { benchmarkGet(16384, b) } -func BenchmarkGet32768(b *testing.B) { benchmarkGet(32768, b) } -func BenchmarkGet65536(b *testing.B) { benchmarkGet(65536, b) } - -func benchmarkGet(initial int, b *testing.B) { - s := populate(New(rng), 0, initial) - b.ResetTimer() - for idx := 0; idx < b.N; idx++ { - s.Get(indices[idx%initial]) - } -} - -func populate(s *SkipList, offset, lim int) *SkipList { - for idx := 0; idx < lim; idx++ { - k := indices[(offset+idx)%len(indices)] - v := keyVals[k] - s.Insert(k, v) - } - return s -} - -func populateFast(s *SkipList, offset, lim int) *SkipList { - for idx := 0; idx < lim; idx++ { - n := idx + offset - s.Insert(intKey(n), n) - } - return s -} - -func TestMain(m *testing.M) { - for idx := 0; idx < keyValsLen; idx++ { - keyVals[intKey(idx)] = strconv.FormatInt(int64(idx), 3) - } - for idx, k := range rand.Perm(keyValsLen) { - indices[idx] = intKey(k) - } - os.Exit(m.Run()) -} diff --git a/experimental/tracer/vendor/manifest b/experimental/tracer/vendor/manifest deleted file mode 100644 index 0005f2ddc..000000000 --- a/experimental/tracer/vendor/manifest +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": 0, - "dependencies": [ - { - "importpath": "github.com/msackman/skiplist", - "repository": "https://github.com/msackman/skiplist", - "revision": "57733164b18444c51f63e9a80f1693961dde8036", - "branch": "master" - } - ] -} \ No newline at end of file diff --git a/experimental/Makefile b/extras/Makefile similarity index 90% rename from experimental/Makefile rename to extras/Makefile index c489209d9..aa045b2a2 100644 --- a/experimental/Makefile +++ b/extras/Makefile @@ -10,7 +10,7 @@ all: $(TARGETS) ifeq ($(BUILD_IN_CONTAINER),true) $(TARGETS): $(SUDO) docker run -ti $(RM) -v $(shell pwd)/../:/go/src/github.com/weaveworks/scope -e GOARCH -e GOOS \ - weaveworks/scope-backend-build -C experimental $@ + weaveworks/scope-backend-build -C extras $@ else $(TARGETS): go build -ldflags "-extldflags \"-static\"" -tags netgo -o $@ ./$(@D) diff --git a/experimental/README.md b/extras/README.md similarity index 78% rename from experimental/README.md rename to extras/README.md index 3dba2daf2..babeff960 100644 --- a/experimental/README.md +++ b/extras/README.md @@ -1,4 +1,6 @@ -# Experimental Code +# Extra code + +Useful things that go well with scope. - Code in this directory must always compile (enforced by CircleCI) - This directory is ignored for testing but should lint cleanly diff --git a/experimental/build_on_circle.sh b/extras/build_on_circle.sh similarity index 100% rename from experimental/build_on_circle.sh rename to extras/build_on_circle.sh diff --git a/experimental/example/.gitignore b/extras/example/.gitignore similarity index 100% rename from experimental/example/.gitignore rename to extras/example/.gitignore diff --git a/experimental/example/Makefile b/extras/example/Makefile similarity index 94% rename from experimental/example/Makefile rename to extras/example/Makefile index 4492632bf..f71454639 100644 --- a/experimental/example/Makefile +++ b/extras/example/Makefile @@ -11,7 +11,7 @@ qotd/qotd: qotd/qotd.o ifeq ($(BUILD_IN_CONTAINER),true) qotd/qotd qotd/qotd.o searchapp/searchapp shout/shout: $(SUDO) docker run -ti --rm -v $(shell pwd)/../../:/go/src/github.com/weaveworks/scope -e GOARCH -e GOOS \ - weaveworks/scope-backend-build -C experimental/example $@ + weaveworks/scope-backend-build -C extras/example $@ else qotd/qotd: gcc -o $@ $< $(CFLAGS) diff --git a/experimental/example/README.md b/extras/example/README.md similarity index 100% rename from experimental/example/README.md rename to extras/example/README.md diff --git a/experimental/example/app/Dockerfile b/extras/example/app/Dockerfile similarity index 100% rename from experimental/example/app/Dockerfile rename to extras/example/app/Dockerfile diff --git a/experimental/example/app/app.py b/extras/example/app/app.py similarity index 100% rename from experimental/example/app/app.py rename to extras/example/app/app.py diff --git a/experimental/example/app/requirements.txt b/extras/example/app/requirements.txt similarity index 100% rename from experimental/example/app/requirements.txt rename to extras/example/app/requirements.txt diff --git a/experimental/example/client/Dockerfile b/extras/example/client/Dockerfile similarity index 100% rename from experimental/example/client/Dockerfile rename to extras/example/client/Dockerfile diff --git a/experimental/example/client/client.py b/extras/example/client/client.py similarity index 100% rename from experimental/example/client/client.py rename to extras/example/client/client.py diff --git a/experimental/example/client/requirements.txt b/extras/example/client/requirements.txt similarity index 100% rename from experimental/example/client/requirements.txt rename to extras/example/client/requirements.txt diff --git a/experimental/example/echo/Dockerfile b/extras/example/echo/Dockerfile similarity index 100% rename from experimental/example/echo/Dockerfile rename to extras/example/echo/Dockerfile diff --git a/experimental/example/echo/echo.py b/extras/example/echo/echo.py similarity index 100% rename from experimental/example/echo/echo.py rename to extras/example/echo/echo.py diff --git a/experimental/example/echo/requirements.txt b/extras/example/echo/requirements.txt similarity index 100% rename from experimental/example/echo/requirements.txt rename to extras/example/echo/requirements.txt diff --git a/experimental/example/frontend-k8s/Dockerfile b/extras/example/frontend-k8s/Dockerfile similarity index 100% rename from experimental/example/frontend-k8s/Dockerfile rename to extras/example/frontend-k8s/Dockerfile diff --git a/experimental/example/frontend-k8s/default.conf b/extras/example/frontend-k8s/default.conf similarity index 100% rename from experimental/example/frontend-k8s/default.conf rename to extras/example/frontend-k8s/default.conf diff --git a/experimental/example/frontend/Dockerfile b/extras/example/frontend/Dockerfile similarity index 100% rename from experimental/example/frontend/Dockerfile rename to extras/example/frontend/Dockerfile diff --git a/experimental/example/frontend/default.conf b/extras/example/frontend/default.conf similarity index 100% rename from experimental/example/frontend/default.conf rename to extras/example/frontend/default.conf diff --git a/experimental/example/k8s/app-deployment.yaml b/extras/example/k8s/app-deployment.yaml similarity index 100% rename from experimental/example/k8s/app-deployment.yaml rename to extras/example/k8s/app-deployment.yaml diff --git a/experimental/example/k8s/app-svc.yaml b/extras/example/k8s/app-svc.yaml similarity index 100% rename from experimental/example/k8s/app-svc.yaml rename to extras/example/k8s/app-svc.yaml diff --git a/experimental/example/k8s/client-deployment.yaml b/extras/example/k8s/client-deployment.yaml similarity index 100% rename from experimental/example/k8s/client-deployment.yaml rename to extras/example/k8s/client-deployment.yaml diff --git a/experimental/example/k8s/echo-deployment.yaml b/extras/example/k8s/echo-deployment.yaml similarity index 100% rename from experimental/example/k8s/echo-deployment.yaml rename to extras/example/k8s/echo-deployment.yaml diff --git a/experimental/example/k8s/echo-svc.yaml b/extras/example/k8s/echo-svc.yaml similarity index 100% rename from experimental/example/k8s/echo-svc.yaml rename to extras/example/k8s/echo-svc.yaml diff --git a/experimental/example/k8s/elasticsearch-deployment.yaml b/extras/example/k8s/elasticsearch-deployment.yaml similarity index 100% rename from experimental/example/k8s/elasticsearch-deployment.yaml rename to extras/example/k8s/elasticsearch-deployment.yaml diff --git a/experimental/example/k8s/elasticsearch-svc.yaml b/extras/example/k8s/elasticsearch-svc.yaml similarity index 100% rename from experimental/example/k8s/elasticsearch-svc.yaml rename to extras/example/k8s/elasticsearch-svc.yaml diff --git a/experimental/example/k8s/frontend-deployment.yaml b/extras/example/k8s/frontend-deployment.yaml similarity index 100% rename from experimental/example/k8s/frontend-deployment.yaml rename to extras/example/k8s/frontend-deployment.yaml diff --git a/experimental/example/k8s/frontend-svc.yaml b/extras/example/k8s/frontend-svc.yaml similarity index 100% rename from experimental/example/k8s/frontend-svc.yaml rename to extras/example/k8s/frontend-svc.yaml diff --git a/experimental/example/k8s/qotd-deployment.yaml b/extras/example/k8s/qotd-deployment.yaml similarity index 100% rename from experimental/example/k8s/qotd-deployment.yaml rename to extras/example/k8s/qotd-deployment.yaml diff --git a/experimental/example/k8s/qotd-svc.yaml b/extras/example/k8s/qotd-svc.yaml similarity index 100% rename from experimental/example/k8s/qotd-svc.yaml rename to extras/example/k8s/qotd-svc.yaml diff --git a/experimental/example/k8s/redis-deployment.yaml b/extras/example/k8s/redis-deployment.yaml similarity index 100% rename from experimental/example/k8s/redis-deployment.yaml rename to extras/example/k8s/redis-deployment.yaml diff --git a/experimental/example/k8s/redis-svc.yaml b/extras/example/k8s/redis-svc.yaml similarity index 100% rename from experimental/example/k8s/redis-svc.yaml rename to extras/example/k8s/redis-svc.yaml diff --git a/experimental/example/k8s/search-deployment.yaml b/extras/example/k8s/search-deployment.yaml similarity index 100% rename from experimental/example/k8s/search-deployment.yaml rename to extras/example/k8s/search-deployment.yaml diff --git a/experimental/example/k8s/search-svc.yaml b/extras/example/k8s/search-svc.yaml similarity index 100% rename from experimental/example/k8s/search-svc.yaml rename to extras/example/k8s/search-svc.yaml diff --git a/experimental/example/qotd/Dockerfile b/extras/example/qotd/Dockerfile similarity index 100% rename from experimental/example/qotd/Dockerfile rename to extras/example/qotd/Dockerfile diff --git a/experimental/example/qotd/qotd.c b/extras/example/qotd/qotd.c similarity index 100% rename from experimental/example/qotd/qotd.c rename to extras/example/qotd/qotd.c diff --git a/experimental/example/run.sh b/extras/example/run.sh similarity index 100% rename from experimental/example/run.sh rename to extras/example/run.sh diff --git a/experimental/example/run_tracer.sh b/extras/example/run_tracer.sh similarity index 100% rename from experimental/example/run_tracer.sh rename to extras/example/run_tracer.sh diff --git a/experimental/example/searchapp/Dockerfile b/extras/example/searchapp/Dockerfile similarity index 100% rename from experimental/example/searchapp/Dockerfile rename to extras/example/searchapp/Dockerfile diff --git a/experimental/example/searchapp/app.go b/extras/example/searchapp/app.go similarity index 100% rename from experimental/example/searchapp/app.go rename to extras/example/searchapp/app.go diff --git a/experimental/example/shout/Dockerfile b/extras/example/shout/Dockerfile similarity index 100% rename from experimental/example/shout/Dockerfile rename to extras/example/shout/Dockerfile diff --git a/experimental/example/shout/shout.go b/extras/example/shout/shout.go similarity index 100% rename from experimental/example/shout/shout.go rename to extras/example/shout/shout.go diff --git a/experimental/example/trace_app/Dockerfile b/extras/example/trace_app/Dockerfile similarity index 100% rename from experimental/example/trace_app/Dockerfile rename to extras/example/trace_app/Dockerfile diff --git a/experimental/example/trace_app/app.py b/extras/example/trace_app/app.py similarity index 100% rename from experimental/example/trace_app/app.py rename to extras/example/trace_app/app.py diff --git a/experimental/example/trace_app/requirements.txt b/extras/example/trace_app/requirements.txt similarity index 100% rename from experimental/example/trace_app/requirements.txt rename to extras/example/trace_app/requirements.txt diff --git a/experimental/example/vendor/github.com/richo/GOSHOUT/README.MD b/extras/example/vendor/github.com/richo/GOSHOUT/README.MD similarity index 100% rename from experimental/example/vendor/github.com/richo/GOSHOUT/README.MD rename to extras/example/vendor/github.com/richo/GOSHOUT/README.MD diff --git a/experimental/example/vendor/github.com/richo/GOSHOUT/SHOUT.go b/extras/example/vendor/github.com/richo/GOSHOUT/SHOUT.go similarity index 100% rename from experimental/example/vendor/github.com/richo/GOSHOUT/SHOUT.go rename to extras/example/vendor/github.com/richo/GOSHOUT/SHOUT.go diff --git a/experimental/example/vendor/manifest b/extras/example/vendor/manifest similarity index 100% rename from experimental/example/vendor/manifest rename to extras/example/vendor/manifest diff --git a/experimental/demoprobe/Makefile b/extras/fixprobe/Makefile similarity index 100% rename from experimental/demoprobe/Makefile rename to extras/fixprobe/Makefile diff --git a/experimental/fixprobe/main.go b/extras/fixprobe/main.go similarity index 100% rename from experimental/fixprobe/main.go rename to extras/fixprobe/main.go diff --git a/experimental/in_parallel.sh b/extras/in_parallel.sh similarity index 100% rename from experimental/in_parallel.sh rename to extras/in_parallel.sh From 7cc829e463a6243a9ee8b141e8013253c555b1de Mon Sep 17 00:00:00 2001 From: Jonathan Lange Date: Thu, 7 Jul 2016 15:02:26 +0100 Subject: [PATCH 2/2] What's tracer? --- extras/build_on_circle.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/build_on_circle.sh b/extras/build_on_circle.sh index fff932eda..d372e51ee 100755 --- a/extras/build_on_circle.sh +++ b/extras/build_on_circle.sh @@ -2,4 +2,4 @@ set -e -./in_parallel.sh "make RM=" tracer $(find . -maxdepth 2 -name *.go -printf "%h\n" | sort -u | sed -n 's/\.\/\(.*\)/\1\/\1/p') +./in_parallel.sh "make RM=" $(find . -maxdepth 2 -name *.go -printf "%h\n" | sort -u | sed -n 's/\.\/\(.*\)/\1\/\1/p')