mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Merge pull request #64800 from dashpole/cadvisor_godep
Automatic merge from submit-queue (batch tested with PRs 63717, 64646, 64792, 64784, 64800). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Update cadvisor godeps to v0.30.0 **What this PR does / why we need it**: cAdvisor godep update corresponding to 1.11 **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes #63204 **Release note**: ```release-note Use IONice to reduce IO priority of du and find cAdvisor ContainerReference no longer contains Labels. Use ContainerSpec instead. Fix a bug where cadvisor failed to discover a sub-cgroup that was created soon after the parent cgroup. ``` /sig node /kind bug /priority critical-urgent /assign @dchen1107
This commit is contained in:
		
							
								
								
									
										228
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										228
									
								
								Godeps/Godeps.json
									
									
									
										generated
									
									
									
								
							@@ -499,48 +499,48 @@
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containerd/containerd/api/services/containers/v1",
 | 
			
		||||
			"Comment": "v1.0.0-beta.2-159-g27d450a0",
 | 
			
		||||
			"Rev": "27d450a01bb533d7ebc5701eb52792565396b084"
 | 
			
		||||
			"Comment": "v1.0.2",
 | 
			
		||||
			"Rev": "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containerd/containerd/api/services/tasks/v1",
 | 
			
		||||
			"Comment": "v1.0.0-beta.2-159-g27d450a0",
 | 
			
		||||
			"Rev": "27d450a01bb533d7ebc5701eb52792565396b084"
 | 
			
		||||
			"Comment": "v1.0.2",
 | 
			
		||||
			"Rev": "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containerd/containerd/api/services/version/v1",
 | 
			
		||||
			"Comment": "v1.0.0-beta.2-159-g27d450a0",
 | 
			
		||||
			"Rev": "27d450a01bb533d7ebc5701eb52792565396b084"
 | 
			
		||||
			"Comment": "v1.0.2",
 | 
			
		||||
			"Rev": "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containerd/containerd/api/types",
 | 
			
		||||
			"Comment": "v1.0.0-beta.2-159-g27d450a0",
 | 
			
		||||
			"Rev": "27d450a01bb533d7ebc5701eb52792565396b084"
 | 
			
		||||
			"Comment": "v1.0.2",
 | 
			
		||||
			"Rev": "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containerd/containerd/api/types/task",
 | 
			
		||||
			"Comment": "v1.0.0-beta.2-159-g27d450a0",
 | 
			
		||||
			"Rev": "27d450a01bb533d7ebc5701eb52792565396b084"
 | 
			
		||||
			"Comment": "v1.0.2",
 | 
			
		||||
			"Rev": "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containerd/containerd/containers",
 | 
			
		||||
			"Comment": "v1.0.0-beta.2-159-g27d450a0",
 | 
			
		||||
			"Rev": "27d450a01bb533d7ebc5701eb52792565396b084"
 | 
			
		||||
			"Comment": "v1.0.2",
 | 
			
		||||
			"Rev": "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containerd/containerd/dialer",
 | 
			
		||||
			"Comment": "v1.0.0-beta.2-159-g27d450a0",
 | 
			
		||||
			"Rev": "27d450a01bb533d7ebc5701eb52792565396b084"
 | 
			
		||||
			"Comment": "v1.0.2",
 | 
			
		||||
			"Rev": "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containerd/containerd/errdefs",
 | 
			
		||||
			"Comment": "v1.0.0-beta.2-159-g27d450a0",
 | 
			
		||||
			"Rev": "27d450a01bb533d7ebc5701eb52792565396b084"
 | 
			
		||||
			"Comment": "v1.0.2",
 | 
			
		||||
			"Rev": "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containerd/containerd/namespaces",
 | 
			
		||||
			"Comment": "v1.0.0-beta.2-159-g27d450a0",
 | 
			
		||||
			"Rev": "27d450a01bb533d7ebc5701eb52792565396b084"
 | 
			
		||||
			"Comment": "v1.0.2",
 | 
			
		||||
			"Rev": "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/containernetworking/cni/libcni",
 | 
			
		||||
@@ -1142,6 +1142,11 @@
 | 
			
		||||
			"Comment": "docs-v1.12.0-rc4-2016-07-15-7401-g4f3616fb1",
 | 
			
		||||
			"Rev": "4f3616fb1c112e206b88cb7a9922bf49067a7756"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/docker/docker/pkg/parsers/operatingsystem",
 | 
			
		||||
			"Comment": "docs-v1.12.0-rc4-2016-07-15-7401-g4f3616fb1",
 | 
			
		||||
			"Rev": "4f3616fb1c112e206b88cb7a9922bf49067a7756"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/docker/docker/pkg/stdcopy",
 | 
			
		||||
			"Comment": "docs-v1.12.0-rc4-2016-07-15-7401-g4f3616fb1",
 | 
			
		||||
@@ -1482,11 +1487,6 @@
 | 
			
		||||
			"Comment": "v1.1.0",
 | 
			
		||||
			"Rev": "b4deda0973fb4c70b50d226b1af49f3da59f5265"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/golang/protobuf/ptypes/empty",
 | 
			
		||||
			"Comment": "v1.1.0",
 | 
			
		||||
			"Rev": "b4deda0973fb4c70b50d226b1af49f3da59f5265"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/golang/protobuf/ptypes/struct",
 | 
			
		||||
			"Comment": "v1.1.0",
 | 
			
		||||
@@ -1508,218 +1508,218 @@
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/accelerators",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/api",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/cache/memory",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/client/v2",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/collector",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/container",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/container/common",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/container/containerd",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/container/crio",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/container/docker",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/container/libcontainer",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/container/raw",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/container/rkt",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/container/systemd",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/devicemapper",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/events",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/fs",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/healthz",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/http",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/http/mux",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/info/v1",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/info/v2",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/machine",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/manager",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/manager/watcher",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/manager/watcher/raw",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/manager/watcher/rkt",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/metrics",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/pages",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/pages/static",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/storage",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/summary",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/utils",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/utils/cloudinfo",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/utils/cpuload",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/utils/cpuload/netlink",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/utils/docker",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/utils/oomparser",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/utils/sysfs",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/utils/sysinfo",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/validate",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/version",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/cadvisor/zfs",
 | 
			
		||||
			"Comment": "v0.29.1",
 | 
			
		||||
			"Rev": "2e02d28350c5fbbad9cfb7e5a1733468b75ab3f9"
 | 
			
		||||
			"Comment": "v0.30.0",
 | 
			
		||||
			"Rev": "f6359ffcbdec3c228bf312e6939ea6edf556ce52"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/google/certificate-transparency-go",
 | 
			
		||||
@@ -2118,6 +2118,11 @@
 | 
			
		||||
			"Comment": "v1.1.0-2-g8bdf7d1",
 | 
			
		||||
			"Rev": "8bdf7d1a087ccc975cf37dd6507da50698fd19ca"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/mattn/go-shellwords",
 | 
			
		||||
			"Comment": "v1.0.3-20-gf8471b0",
 | 
			
		||||
			"Rev": "f8471b0a71ded0ab910825ee2cf230f25de000f1"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "github.com/matttproud/golang_protobuf_extensions/pbutil",
 | 
			
		||||
			"Rev": "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a"
 | 
			
		||||
@@ -3181,11 +3186,6 @@
 | 
			
		||||
			"Comment": "v1.7.5",
 | 
			
		||||
			"Rev": "5b3c4e850e90a4cf6a20ebd46c8b32a0a3afcb9e"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "google.golang.org/grpc/grpclb/grpc_lb_v1",
 | 
			
		||||
			"Comment": "v1.7.5",
 | 
			
		||||
			"Rev": "5b3c4e850e90a4cf6a20ebd46c8b32a0a3afcb9e"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"ImportPath": "google.golang.org/grpc/grpclb/grpc_lb_v1/messages",
 | 
			
		||||
			"Comment": "v1.7.5",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										477
									
								
								Godeps/LICENSES
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										477
									
								
								Godeps/LICENSES
									
									
									
										generated
									
									
									
								
							@@ -40289,6 +40289,205 @@ Apache License
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/docker/docker/pkg/parsers/operatingsystem licensed under: =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                                 Apache License
 | 
			
		||||
                           Version 2.0, January 2004
 | 
			
		||||
                        https://www.apache.org/licenses/
 | 
			
		||||
 | 
			
		||||
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 | 
			
		||||
 | 
			
		||||
   1. Definitions.
 | 
			
		||||
 | 
			
		||||
      "License" shall mean the terms and conditions for use, reproduction,
 | 
			
		||||
      and distribution as defined by Sections 1 through 9 of this document.
 | 
			
		||||
 | 
			
		||||
      "Licensor" shall mean the copyright owner or entity authorized by
 | 
			
		||||
      the copyright owner that is granting the License.
 | 
			
		||||
 | 
			
		||||
      "Legal Entity" shall mean the union of the acting entity and all
 | 
			
		||||
      other entities that control, are controlled by, or are under common
 | 
			
		||||
      control with that entity. For the purposes of this definition,
 | 
			
		||||
      "control" means (i) the power, direct or indirect, to cause the
 | 
			
		||||
      direction or management of such entity, whether by contract or
 | 
			
		||||
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
 | 
			
		||||
      outstanding shares, or (iii) beneficial ownership of such entity.
 | 
			
		||||
 | 
			
		||||
      "You" (or "Your") shall mean an individual or Legal Entity
 | 
			
		||||
      exercising permissions granted by this License.
 | 
			
		||||
 | 
			
		||||
      "Source" form shall mean the preferred form for making modifications,
 | 
			
		||||
      including but not limited to software source code, documentation
 | 
			
		||||
      source, and configuration files.
 | 
			
		||||
 | 
			
		||||
      "Object" form shall mean any form resulting from mechanical
 | 
			
		||||
      transformation or translation of a Source form, including but
 | 
			
		||||
      not limited to compiled object code, generated documentation,
 | 
			
		||||
      and conversions to other media types.
 | 
			
		||||
 | 
			
		||||
      "Work" shall mean the work of authorship, whether in Source or
 | 
			
		||||
      Object form, made available under the License, as indicated by a
 | 
			
		||||
      copyright notice that is included in or attached to the work
 | 
			
		||||
      (an example is provided in the Appendix below).
 | 
			
		||||
 | 
			
		||||
      "Derivative Works" shall mean any work, whether in Source or Object
 | 
			
		||||
      form, that is based on (or derived from) the Work and for which the
 | 
			
		||||
      editorial revisions, annotations, elaborations, or other modifications
 | 
			
		||||
      represent, as a whole, an original work of authorship. For the purposes
 | 
			
		||||
      of this License, Derivative Works shall not include works that remain
 | 
			
		||||
      separable from, or merely link (or bind by name) to the interfaces of,
 | 
			
		||||
      the Work and Derivative Works thereof.
 | 
			
		||||
 | 
			
		||||
      "Contribution" shall mean any work of authorship, including
 | 
			
		||||
      the original version of the Work and any modifications or additions
 | 
			
		||||
      to that Work or Derivative Works thereof, that is intentionally
 | 
			
		||||
      submitted to Licensor for inclusion in the Work by the copyright owner
 | 
			
		||||
      or by an individual or Legal Entity authorized to submit on behalf of
 | 
			
		||||
      the copyright owner. For the purposes of this definition, "submitted"
 | 
			
		||||
      means any form of electronic, verbal, or written communication sent
 | 
			
		||||
      to the Licensor or its representatives, including but not limited to
 | 
			
		||||
      communication on electronic mailing lists, source code control systems,
 | 
			
		||||
      and issue tracking systems that are managed by, or on behalf of, the
 | 
			
		||||
      Licensor for the purpose of discussing and improving the Work, but
 | 
			
		||||
      excluding communication that is conspicuously marked or otherwise
 | 
			
		||||
      designated in writing by the copyright owner as "Not a Contribution."
 | 
			
		||||
 | 
			
		||||
      "Contributor" shall mean Licensor and any individual or Legal Entity
 | 
			
		||||
      on behalf of whom a Contribution has been received by Licensor and
 | 
			
		||||
      subsequently incorporated within the Work.
 | 
			
		||||
 | 
			
		||||
   2. Grant of Copyright License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      copyright license to reproduce, prepare Derivative Works of,
 | 
			
		||||
      publicly display, publicly perform, sublicense, and distribute the
 | 
			
		||||
      Work and such Derivative Works in Source or Object form.
 | 
			
		||||
 | 
			
		||||
   3. Grant of Patent License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      (except as stated in this section) patent license to make, have made,
 | 
			
		||||
      use, offer to sell, sell, import, and otherwise transfer the Work,
 | 
			
		||||
      where such license applies only to those patent claims licensable
 | 
			
		||||
      by such Contributor that are necessarily infringed by their
 | 
			
		||||
      Contribution(s) alone or by combination of their Contribution(s)
 | 
			
		||||
      with the Work to which such Contribution(s) was submitted. If You
 | 
			
		||||
      institute patent litigation against any entity (including a
 | 
			
		||||
      cross-claim or counterclaim in a lawsuit) alleging that the Work
 | 
			
		||||
      or a Contribution incorporated within the Work constitutes direct
 | 
			
		||||
      or contributory patent infringement, then any patent licenses
 | 
			
		||||
      granted to You under this License for that Work shall terminate
 | 
			
		||||
      as of the date such litigation is filed.
 | 
			
		||||
 | 
			
		||||
   4. Redistribution. You may reproduce and distribute copies of the
 | 
			
		||||
      Work or Derivative Works thereof in any medium, with or without
 | 
			
		||||
      modifications, and in Source or Object form, provided that You
 | 
			
		||||
      meet the following conditions:
 | 
			
		||||
 | 
			
		||||
      (a) You must give any other recipients of the Work or
 | 
			
		||||
          Derivative Works a copy of this License; and
 | 
			
		||||
 | 
			
		||||
      (b) You must cause any modified files to carry prominent notices
 | 
			
		||||
          stating that You changed the files; and
 | 
			
		||||
 | 
			
		||||
      (c) You must retain, in the Source form of any Derivative Works
 | 
			
		||||
          that You distribute, all copyright, patent, trademark, and
 | 
			
		||||
          attribution notices from the Source form of the Work,
 | 
			
		||||
          excluding those notices that do not pertain to any part of
 | 
			
		||||
          the Derivative Works; and
 | 
			
		||||
 | 
			
		||||
      (d) If the Work includes a "NOTICE" text file as part of its
 | 
			
		||||
          distribution, then any Derivative Works that You distribute must
 | 
			
		||||
          include a readable copy of the attribution notices contained
 | 
			
		||||
          within such NOTICE file, excluding those notices that do not
 | 
			
		||||
          pertain to any part of the Derivative Works, in at least one
 | 
			
		||||
          of the following places: within a NOTICE text file distributed
 | 
			
		||||
          as part of the Derivative Works; within the Source form or
 | 
			
		||||
          documentation, if provided along with the Derivative Works; or,
 | 
			
		||||
          within a display generated by the Derivative Works, if and
 | 
			
		||||
          wherever such third-party notices normally appear. The contents
 | 
			
		||||
          of the NOTICE file are for informational purposes only and
 | 
			
		||||
          do not modify the License. You may add Your own attribution
 | 
			
		||||
          notices within Derivative Works that You distribute, alongside
 | 
			
		||||
          or as an addendum to the NOTICE text from the Work, provided
 | 
			
		||||
          that such additional attribution notices cannot be construed
 | 
			
		||||
          as modifying the License.
 | 
			
		||||
 | 
			
		||||
      You may add Your own copyright statement to Your modifications and
 | 
			
		||||
      may provide additional or different license terms and conditions
 | 
			
		||||
      for use, reproduction, or distribution of Your modifications, or
 | 
			
		||||
      for any such Derivative Works as a whole, provided Your use,
 | 
			
		||||
      reproduction, and distribution of the Work otherwise complies with
 | 
			
		||||
      the conditions stated in this License.
 | 
			
		||||
 | 
			
		||||
   5. Submission of Contributions. Unless You explicitly state otherwise,
 | 
			
		||||
      any Contribution intentionally submitted for inclusion in the Work
 | 
			
		||||
      by You to the Licensor shall be under the terms and conditions of
 | 
			
		||||
      this License, without any additional terms or conditions.
 | 
			
		||||
      Notwithstanding the above, nothing herein shall supersede or modify
 | 
			
		||||
      the terms of any separate license agreement you may have executed
 | 
			
		||||
      with Licensor regarding such Contributions.
 | 
			
		||||
 | 
			
		||||
   6. Trademarks. This License does not grant permission to use the trade
 | 
			
		||||
      names, trademarks, service marks, or product names of the Licensor,
 | 
			
		||||
      except as required for reasonable and customary use in describing the
 | 
			
		||||
      origin of the Work and reproducing the content of the NOTICE file.
 | 
			
		||||
 | 
			
		||||
   7. Disclaimer of Warranty. Unless required by applicable law or
 | 
			
		||||
      agreed to in writing, Licensor provides the Work (and each
 | 
			
		||||
      Contributor provides its Contributions) on an "AS IS" BASIS,
 | 
			
		||||
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
			
		||||
      implied, including, without limitation, any warranties or conditions
 | 
			
		||||
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
 | 
			
		||||
      PARTICULAR PURPOSE. You are solely responsible for determining the
 | 
			
		||||
      appropriateness of using or redistributing the Work and assume any
 | 
			
		||||
      risks associated with Your exercise of permissions under this License.
 | 
			
		||||
 | 
			
		||||
   8. Limitation of Liability. In no event and under no legal theory,
 | 
			
		||||
      whether in tort (including negligence), contract, or otherwise,
 | 
			
		||||
      unless required by applicable law (such as deliberate and grossly
 | 
			
		||||
      negligent acts) or agreed to in writing, shall any Contributor be
 | 
			
		||||
      liable to You for damages, including any direct, indirect, special,
 | 
			
		||||
      incidental, or consequential damages of any character arising as a
 | 
			
		||||
      result of this License or out of the use or inability to use the
 | 
			
		||||
      Work (including but not limited to damages for loss of goodwill,
 | 
			
		||||
      work stoppage, computer failure or malfunction, or any and all
 | 
			
		||||
      other commercial damages or losses), even if such Contributor
 | 
			
		||||
      has been advised of the possibility of such damages.
 | 
			
		||||
 | 
			
		||||
   9. Accepting Warranty or Additional Liability. While redistributing
 | 
			
		||||
      the Work or Derivative Works thereof, You may choose to offer,
 | 
			
		||||
      and charge a fee for, acceptance of support, warranty, indemnity,
 | 
			
		||||
      or other liability obligations and/or rights consistent with this
 | 
			
		||||
      License. However, in accepting such obligations, You may act only
 | 
			
		||||
      on Your own behalf and on Your sole responsibility, not on behalf
 | 
			
		||||
      of any other Contributor, and only if You agree to indemnify,
 | 
			
		||||
      defend, and hold each Contributor harmless for any liability
 | 
			
		||||
      incurred by, or claims asserted against, such Contributor by reason
 | 
			
		||||
      of your accepting any such warranty or additional liability.
 | 
			
		||||
 | 
			
		||||
   END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
   Copyright 2013-2017 Docker, Inc.
 | 
			
		||||
 | 
			
		||||
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
   you may not use this file except in compliance with the License.
 | 
			
		||||
   You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
       https://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
   Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
   See the License for the specific language governing permissions and
 | 
			
		||||
   limitations under the License.
 | 
			
		||||
 | 
			
		||||
= vendor/github.com/docker/docker/LICENSE 9740d093a080530b5c5c6573df9af45a
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/docker/docker/pkg/stdcopy licensed under: =
 | 
			
		||||
 | 
			
		||||
@@ -47950,45 +48149,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/golang/protobuf/ptypes/empty licensed under: =
 | 
			
		||||
 | 
			
		||||
Go support for Protocol Buffers - Google's data interchange format
 | 
			
		||||
 | 
			
		||||
Copyright 2010 The Go Authors.  All rights reserved.
 | 
			
		||||
https://github.com/golang/protobuf
 | 
			
		||||
 | 
			
		||||
Redistribution and use in source and binary forms, with or without
 | 
			
		||||
modification, are permitted provided that the following conditions are
 | 
			
		||||
met:
 | 
			
		||||
 | 
			
		||||
    * Redistributions of source code must retain the above copyright
 | 
			
		||||
notice, this list of conditions and the following disclaimer.
 | 
			
		||||
    * Redistributions in binary form must reproduce the above
 | 
			
		||||
copyright notice, this list of conditions and the following disclaimer
 | 
			
		||||
in the documentation and/or other materials provided with the
 | 
			
		||||
distribution.
 | 
			
		||||
    * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
contributors may be used to endorse or promote products derived from
 | 
			
		||||
this software without specific prior written permission.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
= vendor/github.com/golang/protobuf/LICENSE 14db3a56c3796a940ba32948a15f97d0
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/golang/protobuf/ptypes/struct licensed under: =
 | 
			
		||||
 | 
			
		||||
@@ -72296,6 +72456,35 @@ SOFTWARE.
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/mattn/go-shellwords licensed under: =
 | 
			
		||||
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2017 Yasuhiro Matsumoto
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
= vendor/github.com/mattn/go-shellwords/LICENSE e5116fc268f5118168ff06a271b50ef9
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/github.com/matttproud/golang_protobuf_extensions/pbutil licensed under: =
 | 
			
		||||
 | 
			
		||||
@@ -94888,216 +95077,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/google.golang.org/grpc/grpclb/grpc_lb_v1 licensed under: =
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                                 Apache License
 | 
			
		||||
                           Version 2.0, January 2004
 | 
			
		||||
                        http://www.apache.org/licenses/
 | 
			
		||||
 | 
			
		||||
   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
 | 
			
		||||
 | 
			
		||||
   1. Definitions.
 | 
			
		||||
 | 
			
		||||
      "License" shall mean the terms and conditions for use, reproduction,
 | 
			
		||||
      and distribution as defined by Sections 1 through 9 of this document.
 | 
			
		||||
 | 
			
		||||
      "Licensor" shall mean the copyright owner or entity authorized by
 | 
			
		||||
      the copyright owner that is granting the License.
 | 
			
		||||
 | 
			
		||||
      "Legal Entity" shall mean the union of the acting entity and all
 | 
			
		||||
      other entities that control, are controlled by, or are under common
 | 
			
		||||
      control with that entity. For the purposes of this definition,
 | 
			
		||||
      "control" means (i) the power, direct or indirect, to cause the
 | 
			
		||||
      direction or management of such entity, whether by contract or
 | 
			
		||||
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
 | 
			
		||||
      outstanding shares, or (iii) beneficial ownership of such entity.
 | 
			
		||||
 | 
			
		||||
      "You" (or "Your") shall mean an individual or Legal Entity
 | 
			
		||||
      exercising permissions granted by this License.
 | 
			
		||||
 | 
			
		||||
      "Source" form shall mean the preferred form for making modifications,
 | 
			
		||||
      including but not limited to software source code, documentation
 | 
			
		||||
      source, and configuration files.
 | 
			
		||||
 | 
			
		||||
      "Object" form shall mean any form resulting from mechanical
 | 
			
		||||
      transformation or translation of a Source form, including but
 | 
			
		||||
      not limited to compiled object code, generated documentation,
 | 
			
		||||
      and conversions to other media types.
 | 
			
		||||
 | 
			
		||||
      "Work" shall mean the work of authorship, whether in Source or
 | 
			
		||||
      Object form, made available under the License, as indicated by a
 | 
			
		||||
      copyright notice that is included in or attached to the work
 | 
			
		||||
      (an example is provided in the Appendix below).
 | 
			
		||||
 | 
			
		||||
      "Derivative Works" shall mean any work, whether in Source or Object
 | 
			
		||||
      form, that is based on (or derived from) the Work and for which the
 | 
			
		||||
      editorial revisions, annotations, elaborations, or other modifications
 | 
			
		||||
      represent, as a whole, an original work of authorship. For the purposes
 | 
			
		||||
      of this License, Derivative Works shall not include works that remain
 | 
			
		||||
      separable from, or merely link (or bind by name) to the interfaces of,
 | 
			
		||||
      the Work and Derivative Works thereof.
 | 
			
		||||
 | 
			
		||||
      "Contribution" shall mean any work of authorship, including
 | 
			
		||||
      the original version of the Work and any modifications or additions
 | 
			
		||||
      to that Work or Derivative Works thereof, that is intentionally
 | 
			
		||||
      submitted to Licensor for inclusion in the Work by the copyright owner
 | 
			
		||||
      or by an individual or Legal Entity authorized to submit on behalf of
 | 
			
		||||
      the copyright owner. For the purposes of this definition, "submitted"
 | 
			
		||||
      means any form of electronic, verbal, or written communication sent
 | 
			
		||||
      to the Licensor or its representatives, including but not limited to
 | 
			
		||||
      communication on electronic mailing lists, source code control systems,
 | 
			
		||||
      and issue tracking systems that are managed by, or on behalf of, the
 | 
			
		||||
      Licensor for the purpose of discussing and improving the Work, but
 | 
			
		||||
      excluding communication that is conspicuously marked or otherwise
 | 
			
		||||
      designated in writing by the copyright owner as "Not a Contribution."
 | 
			
		||||
 | 
			
		||||
      "Contributor" shall mean Licensor and any individual or Legal Entity
 | 
			
		||||
      on behalf of whom a Contribution has been received by Licensor and
 | 
			
		||||
      subsequently incorporated within the Work.
 | 
			
		||||
 | 
			
		||||
   2. Grant of Copyright License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      copyright license to reproduce, prepare Derivative Works of,
 | 
			
		||||
      publicly display, publicly perform, sublicense, and distribute the
 | 
			
		||||
      Work and such Derivative Works in Source or Object form.
 | 
			
		||||
 | 
			
		||||
   3. Grant of Patent License. Subject to the terms and conditions of
 | 
			
		||||
      this License, each Contributor hereby grants to You a perpetual,
 | 
			
		||||
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 | 
			
		||||
      (except as stated in this section) patent license to make, have made,
 | 
			
		||||
      use, offer to sell, sell, import, and otherwise transfer the Work,
 | 
			
		||||
      where such license applies only to those patent claims licensable
 | 
			
		||||
      by such Contributor that are necessarily infringed by their
 | 
			
		||||
      Contribution(s) alone or by combination of their Contribution(s)
 | 
			
		||||
      with the Work to which such Contribution(s) was submitted. If You
 | 
			
		||||
      institute patent litigation against any entity (including a
 | 
			
		||||
      cross-claim or counterclaim in a lawsuit) alleging that the Work
 | 
			
		||||
      or a Contribution incorporated within the Work constitutes direct
 | 
			
		||||
      or contributory patent infringement, then any patent licenses
 | 
			
		||||
      granted to You under this License for that Work shall terminate
 | 
			
		||||
      as of the date such litigation is filed.
 | 
			
		||||
 | 
			
		||||
   4. Redistribution. You may reproduce and distribute copies of the
 | 
			
		||||
      Work or Derivative Works thereof in any medium, with or without
 | 
			
		||||
      modifications, and in Source or Object form, provided that You
 | 
			
		||||
      meet the following conditions:
 | 
			
		||||
 | 
			
		||||
      (a) You must give any other recipients of the Work or
 | 
			
		||||
          Derivative Works a copy of this License; and
 | 
			
		||||
 | 
			
		||||
      (b) You must cause any modified files to carry prominent notices
 | 
			
		||||
          stating that You changed the files; and
 | 
			
		||||
 | 
			
		||||
      (c) You must retain, in the Source form of any Derivative Works
 | 
			
		||||
          that You distribute, all copyright, patent, trademark, and
 | 
			
		||||
          attribution notices from the Source form of the Work,
 | 
			
		||||
          excluding those notices that do not pertain to any part of
 | 
			
		||||
          the Derivative Works; and
 | 
			
		||||
 | 
			
		||||
      (d) If the Work includes a "NOTICE" text file as part of its
 | 
			
		||||
          distribution, then any Derivative Works that You distribute must
 | 
			
		||||
          include a readable copy of the attribution notices contained
 | 
			
		||||
          within such NOTICE file, excluding those notices that do not
 | 
			
		||||
          pertain to any part of the Derivative Works, in at least one
 | 
			
		||||
          of the following places: within a NOTICE text file distributed
 | 
			
		||||
          as part of the Derivative Works; within the Source form or
 | 
			
		||||
          documentation, if provided along with the Derivative Works; or,
 | 
			
		||||
          within a display generated by the Derivative Works, if and
 | 
			
		||||
          wherever such third-party notices normally appear. The contents
 | 
			
		||||
          of the NOTICE file are for informational purposes only and
 | 
			
		||||
          do not modify the License. You may add Your own attribution
 | 
			
		||||
          notices within Derivative Works that You distribute, alongside
 | 
			
		||||
          or as an addendum to the NOTICE text from the Work, provided
 | 
			
		||||
          that such additional attribution notices cannot be construed
 | 
			
		||||
          as modifying the License.
 | 
			
		||||
 | 
			
		||||
      You may add Your own copyright statement to Your modifications and
 | 
			
		||||
      may provide additional or different license terms and conditions
 | 
			
		||||
      for use, reproduction, or distribution of Your modifications, or
 | 
			
		||||
      for any such Derivative Works as a whole, provided Your use,
 | 
			
		||||
      reproduction, and distribution of the Work otherwise complies with
 | 
			
		||||
      the conditions stated in this License.
 | 
			
		||||
 | 
			
		||||
   5. Submission of Contributions. Unless You explicitly state otherwise,
 | 
			
		||||
      any Contribution intentionally submitted for inclusion in the Work
 | 
			
		||||
      by You to the Licensor shall be under the terms and conditions of
 | 
			
		||||
      this License, without any additional terms or conditions.
 | 
			
		||||
      Notwithstanding the above, nothing herein shall supersede or modify
 | 
			
		||||
      the terms of any separate license agreement you may have executed
 | 
			
		||||
      with Licensor regarding such Contributions.
 | 
			
		||||
 | 
			
		||||
   6. Trademarks. This License does not grant permission to use the trade
 | 
			
		||||
      names, trademarks, service marks, or product names of the Licensor,
 | 
			
		||||
      except as required for reasonable and customary use in describing the
 | 
			
		||||
      origin of the Work and reproducing the content of the NOTICE file.
 | 
			
		||||
 | 
			
		||||
   7. Disclaimer of Warranty. Unless required by applicable law or
 | 
			
		||||
      agreed to in writing, Licensor provides the Work (and each
 | 
			
		||||
      Contributor provides its Contributions) on an "AS IS" BASIS,
 | 
			
		||||
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
			
		||||
      implied, including, without limitation, any warranties or conditions
 | 
			
		||||
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
 | 
			
		||||
      PARTICULAR PURPOSE. You are solely responsible for determining the
 | 
			
		||||
      appropriateness of using or redistributing the Work and assume any
 | 
			
		||||
      risks associated with Your exercise of permissions under this License.
 | 
			
		||||
 | 
			
		||||
   8. Limitation of Liability. In no event and under no legal theory,
 | 
			
		||||
      whether in tort (including negligence), contract, or otherwise,
 | 
			
		||||
      unless required by applicable law (such as deliberate and grossly
 | 
			
		||||
      negligent acts) or agreed to in writing, shall any Contributor be
 | 
			
		||||
      liable to You for damages, including any direct, indirect, special,
 | 
			
		||||
      incidental, or consequential damages of any character arising as a
 | 
			
		||||
      result of this License or out of the use or inability to use the
 | 
			
		||||
      Work (including but not limited to damages for loss of goodwill,
 | 
			
		||||
      work stoppage, computer failure or malfunction, or any and all
 | 
			
		||||
      other commercial damages or losses), even if such Contributor
 | 
			
		||||
      has been advised of the possibility of such damages.
 | 
			
		||||
 | 
			
		||||
   9. Accepting Warranty or Additional Liability. While redistributing
 | 
			
		||||
      the Work or Derivative Works thereof, You may choose to offer,
 | 
			
		||||
      and charge a fee for, acceptance of support, warranty, indemnity,
 | 
			
		||||
      or other liability obligations and/or rights consistent with this
 | 
			
		||||
      License. However, in accepting such obligations, You may act only
 | 
			
		||||
      on Your own behalf and on Your sole responsibility, not on behalf
 | 
			
		||||
      of any other Contributor, and only if You agree to indemnify,
 | 
			
		||||
      defend, and hold each Contributor harmless for any liability
 | 
			
		||||
      incurred by, or claims asserted against, such Contributor by reason
 | 
			
		||||
      of your accepting any such warranty or additional liability.
 | 
			
		||||
 | 
			
		||||
   END OF TERMS AND CONDITIONS
 | 
			
		||||
 | 
			
		||||
   APPENDIX: How to apply the Apache License to your work.
 | 
			
		||||
 | 
			
		||||
      To apply the Apache License to your work, attach the following
 | 
			
		||||
      boilerplate notice, with the fields enclosed by brackets "[]"
 | 
			
		||||
      replaced with your own identifying information. (Don't include
 | 
			
		||||
      the brackets!)  The text should be enclosed in the appropriate
 | 
			
		||||
      comment syntax for the file format. We also recommend that a
 | 
			
		||||
      file or class name and description of purpose be included on the
 | 
			
		||||
      same "printed page" as the copyright notice for easier
 | 
			
		||||
      identification within third-party archives.
 | 
			
		||||
 | 
			
		||||
   Copyright [yyyy] [name of copyright owner]
 | 
			
		||||
 | 
			
		||||
   Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
   you may not use this file except in compliance with the License.
 | 
			
		||||
   You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
       http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
   Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
   distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
   See the License for the specific language governing permissions and
 | 
			
		||||
   limitations under the License.
 | 
			
		||||
 | 
			
		||||
= vendor/google.golang.org/grpc/LICENSE 3b83ef96387f14655fc854ddc3c6bd57
 | 
			
		||||
================================================================================
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
================================================================================
 | 
			
		||||
= vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/messages licensed under: =
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -112,6 +112,7 @@ func New(address string, port uint, imageFsInfoProvider ImageFsInfoProvider, roo
 | 
			
		||||
		cadvisormetrics.NetworkTcpUsageMetrics:  struct{}{},
 | 
			
		||||
		cadvisormetrics.NetworkUdpUsageMetrics:  struct{}{},
 | 
			
		||||
		cadvisormetrics.PerCpuUsageMetrics:      struct{}{},
 | 
			
		||||
		cadvisormetrics.ProcessSchedulerMetrics: struct{}{},
 | 
			
		||||
	}
 | 
			
		||||
	if !usingLegacyStats {
 | 
			
		||||
		ignoreMetrics[cadvisormetrics.DiskUsageMetrics] = struct{}{}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/BUILD
									
									
									
									
										vendored
									
									
								
							@@ -287,6 +287,7 @@ filegroup(
 | 
			
		||||
        "//vendor/github.com/mailru/easyjson/jlexer:all-srcs",
 | 
			
		||||
        "//vendor/github.com/mailru/easyjson/jwriter:all-srcs",
 | 
			
		||||
        "//vendor/github.com/marstr/guid:all-srcs",
 | 
			
		||||
        "//vendor/github.com/mattn/go-shellwords:all-srcs",
 | 
			
		||||
        "//vendor/github.com/matttproud/golang_protobuf_extensions/pbutil:all-srcs",
 | 
			
		||||
        "//vendor/github.com/mholt/caddy/caddyfile:all-srcs",
 | 
			
		||||
        "//vendor/github.com/miekg/dns:all-srcs",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/containers/v1/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/containers/v1/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -12,11 +12,9 @@ go_library(
 | 
			
		||||
    importpath = "github.com/containerd/containerd/api/services/containers/v1",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/proto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/sortkeys:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/types:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/empty:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/net/context:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/grpc:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										232
									
								
								vendor/github.com/containerd/containerd/api/services/containers/v1/containers.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										232
									
								
								vendor/github.com/containerd/containerd/api/services/containers/v1/containers.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
// Code generated by protoc-gen-gogo.
 | 
			
		||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
 | 
			
		||||
// source: github.com/containerd/containerd/api/services/containers/v1/containers.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	Package containers is a generated protocol buffer package.
 | 
			
		||||
@@ -25,9 +24,10 @@ package containers
 | 
			
		||||
import proto "github.com/gogo/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
import _ "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
// skipping weak import gogoproto "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
import google_protobuf1 "github.com/gogo/protobuf/types"
 | 
			
		||||
import google_protobuf2 "github.com/golang/protobuf/ptypes/empty"
 | 
			
		||||
import google_protobuf2 "github.com/gogo/protobuf/types"
 | 
			
		||||
import google_protobuf3 "github.com/gogo/protobuf/types"
 | 
			
		||||
import _ "github.com/gogo/protobuf/types"
 | 
			
		||||
 | 
			
		||||
@@ -844,24 +844,6 @@ func (m *DeleteContainerRequest) MarshalTo(dAtA []byte) (int, error) {
 | 
			
		||||
	return i, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func encodeFixed64Containers(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	dAtA[offset+4] = uint8(v >> 32)
 | 
			
		||||
	dAtA[offset+5] = uint8(v >> 40)
 | 
			
		||||
	dAtA[offset+6] = uint8(v >> 48)
 | 
			
		||||
	dAtA[offset+7] = uint8(v >> 56)
 | 
			
		||||
	return offset + 8
 | 
			
		||||
}
 | 
			
		||||
func encodeFixed32Containers(dAtA []byte, offset int, v uint32) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	return offset + 4
 | 
			
		||||
}
 | 
			
		||||
func encodeVarintContainers(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	for v >= 1<<7 {
 | 
			
		||||
		dAtA[offset] = uint8(v&0x7f | 0x80)
 | 
			
		||||
@@ -1270,7 +1252,14 @@ func (m *Container) Unmarshal(dAtA []byte) error {
 | 
			
		||||
			if postIndex > l {
 | 
			
		||||
				return io.ErrUnexpectedEOF
 | 
			
		||||
			}
 | 
			
		||||
			var keykey uint64
 | 
			
		||||
			if m.Labels == nil {
 | 
			
		||||
				m.Labels = make(map[string]string)
 | 
			
		||||
			}
 | 
			
		||||
			var mapkey string
 | 
			
		||||
			var mapvalue string
 | 
			
		||||
			for iNdEx < postIndex {
 | 
			
		||||
				entryPreIndex := iNdEx
 | 
			
		||||
				var wire uint64
 | 
			
		||||
				for shift := uint(0); ; shift += 7 {
 | 
			
		||||
					if shift >= 64 {
 | 
			
		||||
						return ErrIntOverflowContainers
 | 
			
		||||
@@ -1280,11 +1269,13 @@ func (m *Container) Unmarshal(dAtA []byte) error {
 | 
			
		||||
					}
 | 
			
		||||
					b := dAtA[iNdEx]
 | 
			
		||||
					iNdEx++
 | 
			
		||||
				keykey |= (uint64(b) & 0x7F) << shift
 | 
			
		||||
					wire |= (uint64(b) & 0x7F) << shift
 | 
			
		||||
					if b < 0x80 {
 | 
			
		||||
						break
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				fieldNum := int32(wire >> 3)
 | 
			
		||||
				if fieldNum == 1 {
 | 
			
		||||
					var stringLenmapkey uint64
 | 
			
		||||
					for shift := uint(0); ; shift += 7 {
 | 
			
		||||
						if shift >= 64 {
 | 
			
		||||
@@ -1308,27 +1299,9 @@ func (m *Container) Unmarshal(dAtA []byte) error {
 | 
			
		||||
					if postStringIndexmapkey > l {
 | 
			
		||||
						return io.ErrUnexpectedEOF
 | 
			
		||||
					}
 | 
			
		||||
			mapkey := string(dAtA[iNdEx:postStringIndexmapkey])
 | 
			
		||||
					mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
 | 
			
		||||
					iNdEx = postStringIndexmapkey
 | 
			
		||||
			if m.Labels == nil {
 | 
			
		||||
				m.Labels = make(map[string]string)
 | 
			
		||||
			}
 | 
			
		||||
			if iNdEx < postIndex {
 | 
			
		||||
				var valuekey uint64
 | 
			
		||||
				for shift := uint(0); ; shift += 7 {
 | 
			
		||||
					if shift >= 64 {
 | 
			
		||||
						return ErrIntOverflowContainers
 | 
			
		||||
					}
 | 
			
		||||
					if iNdEx >= l {
 | 
			
		||||
						return io.ErrUnexpectedEOF
 | 
			
		||||
					}
 | 
			
		||||
					b := dAtA[iNdEx]
 | 
			
		||||
					iNdEx++
 | 
			
		||||
					valuekey |= (uint64(b) & 0x7F) << shift
 | 
			
		||||
					if b < 0x80 {
 | 
			
		||||
						break
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				} else if fieldNum == 2 {
 | 
			
		||||
					var stringLenmapvalue uint64
 | 
			
		||||
					for shift := uint(0); ; shift += 7 {
 | 
			
		||||
						if shift >= 64 {
 | 
			
		||||
@@ -1352,13 +1325,24 @@ func (m *Container) Unmarshal(dAtA []byte) error {
 | 
			
		||||
					if postStringIndexmapvalue > l {
 | 
			
		||||
						return io.ErrUnexpectedEOF
 | 
			
		||||
					}
 | 
			
		||||
				mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue])
 | 
			
		||||
					mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue])
 | 
			
		||||
					iNdEx = postStringIndexmapvalue
 | 
			
		||||
				m.Labels[mapkey] = mapvalue
 | 
			
		||||
				} else {
 | 
			
		||||
				var mapvalue string
 | 
			
		||||
				m.Labels[mapkey] = mapvalue
 | 
			
		||||
					iNdEx = entryPreIndex
 | 
			
		||||
					skippy, err := skipContainers(dAtA[iNdEx:])
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						return err
 | 
			
		||||
					}
 | 
			
		||||
					if skippy < 0 {
 | 
			
		||||
						return ErrInvalidLengthContainers
 | 
			
		||||
					}
 | 
			
		||||
					if (iNdEx + skippy) > postIndex {
 | 
			
		||||
						return io.ErrUnexpectedEOF
 | 
			
		||||
					}
 | 
			
		||||
					iNdEx += skippy
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			m.Labels[mapkey] = mapvalue
 | 
			
		||||
			iNdEx = postIndex
 | 
			
		||||
		case 3:
 | 
			
		||||
			if wireType != 2 {
 | 
			
		||||
@@ -1599,7 +1583,14 @@ func (m *Container) Unmarshal(dAtA []byte) error {
 | 
			
		||||
			if postIndex > l {
 | 
			
		||||
				return io.ErrUnexpectedEOF
 | 
			
		||||
			}
 | 
			
		||||
			var keykey uint64
 | 
			
		||||
			if m.Extensions == nil {
 | 
			
		||||
				m.Extensions = make(map[string]google_protobuf1.Any)
 | 
			
		||||
			}
 | 
			
		||||
			var mapkey string
 | 
			
		||||
			mapvalue := &google_protobuf1.Any{}
 | 
			
		||||
			for iNdEx < postIndex {
 | 
			
		||||
				entryPreIndex := iNdEx
 | 
			
		||||
				var wire uint64
 | 
			
		||||
				for shift := uint(0); ; shift += 7 {
 | 
			
		||||
					if shift >= 64 {
 | 
			
		||||
						return ErrIntOverflowContainers
 | 
			
		||||
@@ -1609,11 +1600,13 @@ func (m *Container) Unmarshal(dAtA []byte) error {
 | 
			
		||||
					}
 | 
			
		||||
					b := dAtA[iNdEx]
 | 
			
		||||
					iNdEx++
 | 
			
		||||
				keykey |= (uint64(b) & 0x7F) << shift
 | 
			
		||||
					wire |= (uint64(b) & 0x7F) << shift
 | 
			
		||||
					if b < 0x80 {
 | 
			
		||||
						break
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				fieldNum := int32(wire >> 3)
 | 
			
		||||
				if fieldNum == 1 {
 | 
			
		||||
					var stringLenmapkey uint64
 | 
			
		||||
					for shift := uint(0); ; shift += 7 {
 | 
			
		||||
						if shift >= 64 {
 | 
			
		||||
@@ -1637,27 +1630,9 @@ func (m *Container) Unmarshal(dAtA []byte) error {
 | 
			
		||||
					if postStringIndexmapkey > l {
 | 
			
		||||
						return io.ErrUnexpectedEOF
 | 
			
		||||
					}
 | 
			
		||||
			mapkey := string(dAtA[iNdEx:postStringIndexmapkey])
 | 
			
		||||
					mapkey = string(dAtA[iNdEx:postStringIndexmapkey])
 | 
			
		||||
					iNdEx = postStringIndexmapkey
 | 
			
		||||
			if m.Extensions == nil {
 | 
			
		||||
				m.Extensions = make(map[string]google_protobuf1.Any)
 | 
			
		||||
			}
 | 
			
		||||
			if iNdEx < postIndex {
 | 
			
		||||
				var valuekey uint64
 | 
			
		||||
				for shift := uint(0); ; shift += 7 {
 | 
			
		||||
					if shift >= 64 {
 | 
			
		||||
						return ErrIntOverflowContainers
 | 
			
		||||
					}
 | 
			
		||||
					if iNdEx >= l {
 | 
			
		||||
						return io.ErrUnexpectedEOF
 | 
			
		||||
					}
 | 
			
		||||
					b := dAtA[iNdEx]
 | 
			
		||||
					iNdEx++
 | 
			
		||||
					valuekey |= (uint64(b) & 0x7F) << shift
 | 
			
		||||
					if b < 0x80 {
 | 
			
		||||
						break
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				} else if fieldNum == 2 {
 | 
			
		||||
					var mapmsglen int
 | 
			
		||||
					for shift := uint(0); ; shift += 7 {
 | 
			
		||||
						if shift >= 64 {
 | 
			
		||||
@@ -1683,16 +1658,27 @@ func (m *Container) Unmarshal(dAtA []byte) error {
 | 
			
		||||
					if postmsgIndex > l {
 | 
			
		||||
						return io.ErrUnexpectedEOF
 | 
			
		||||
					}
 | 
			
		||||
				mapvalue := &google_protobuf1.Any{}
 | 
			
		||||
					mapvalue = &google_protobuf1.Any{}
 | 
			
		||||
					if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil {
 | 
			
		||||
						return err
 | 
			
		||||
					}
 | 
			
		||||
					iNdEx = postmsgIndex
 | 
			
		||||
				m.Extensions[mapkey] = *mapvalue
 | 
			
		||||
				} else {
 | 
			
		||||
				var mapvalue google_protobuf1.Any
 | 
			
		||||
				m.Extensions[mapkey] = mapvalue
 | 
			
		||||
					iNdEx = entryPreIndex
 | 
			
		||||
					skippy, err := skipContainers(dAtA[iNdEx:])
 | 
			
		||||
					if err != nil {
 | 
			
		||||
						return err
 | 
			
		||||
					}
 | 
			
		||||
					if skippy < 0 {
 | 
			
		||||
						return ErrInvalidLengthContainers
 | 
			
		||||
					}
 | 
			
		||||
					if (iNdEx + skippy) > postIndex {
 | 
			
		||||
						return io.ErrUnexpectedEOF
 | 
			
		||||
					}
 | 
			
		||||
					iNdEx += skippy
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			m.Extensions[mapkey] = *mapvalue
 | 
			
		||||
			iNdEx = postIndex
 | 
			
		||||
		default:
 | 
			
		||||
			iNdEx = preIndex
 | 
			
		||||
@@ -2689,53 +2675,53 @@ func init() {
 | 
			
		||||
 | 
			
		||||
var fileDescriptorContainers = []byte{
 | 
			
		||||
	// 776 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x72, 0x12, 0x5b,
 | 
			
		||||
	0x10, 0xce, 0x00, 0x81, 0xd0, 0xdc, 0xaa, 0x7b, 0xeb, 0x5c, 0x2e, 0x77, 0x1c, 0xab, 0x80, 0xb0,
 | 
			
		||||
	0xa2, 0x2c, 0x1d, 0x0c, 0x5a, 0x9a, 0x1f, 0x37, 0x21, 0x7f, 0x65, 0x99, 0x58, 0xa9, 0x51, 0x37,
 | 
			
		||||
	0xba, 0x88, 0x03, 0x74, 0xc8, 0xc8, 0xfc, 0x39, 0xe7, 0x40, 0x49, 0xb9, 0xd0, 0x47, 0x70, 0xe7,
 | 
			
		||||
	0x23, 0xf8, 0x2a, 0x59, 0xba, 0x74, 0x15, 0x13, 0x9e, 0xc4, 0x9a, 0x33, 0x33, 0xcc, 0x04, 0x06,
 | 
			
		||||
	0x85, 0x68, 0x76, 0xa7, 0x39, 0xfd, 0x7d, 0xfd, 0xf1, 0x75, 0xf7, 0x01, 0xd8, 0xef, 0x68, 0xec,
 | 
			
		||||
	0xa4, 0xd7, 0x94, 0x5b, 0x96, 0x51, 0x6b, 0x59, 0x26, 0x53, 0x35, 0x13, 0x9d, 0x76, 0xf4, 0xa8,
 | 
			
		||||
	0xda, 0x5a, 0x8d, 0xa2, 0xd3, 0xd7, 0x5a, 0x48, 0xc3, 0xcf, 0x69, 0xad, 0xbf, 0x12, 0x89, 0x64,
 | 
			
		||||
	0xdb, 0xb1, 0x98, 0x45, 0x96, 0x43, 0x9c, 0x1c, 0x60, 0xe4, 0x48, 0x56, 0x7f, 0x45, 0xca, 0x77,
 | 
			
		||||
	0xac, 0x8e, 0xc5, 0xb3, 0x6b, 0xee, 0xc9, 0x03, 0x4a, 0x37, 0x3a, 0x96, 0xd5, 0xd1, 0xb1, 0xc6,
 | 
			
		||||
	0xa3, 0x66, 0xef, 0xb8, 0xa6, 0x9a, 0x03, 0xff, 0xea, 0xe6, 0xf8, 0x15, 0x1a, 0x36, 0x0b, 0x2e,
 | 
			
		||||
	0xcb, 0xe3, 0x97, 0xc7, 0x1a, 0xea, 0xed, 0x23, 0x43, 0xa5, 0x5d, 0x3f, 0xa3, 0x34, 0x9e, 0xc1,
 | 
			
		||||
	0x34, 0x03, 0x29, 0x53, 0x0d, 0xdb, 0x4b, 0xa8, 0x7c, 0x4e, 0x43, 0x76, 0x2b, 0x90, 0x48, 0x0a,
 | 
			
		||||
	0x90, 0xd0, 0xda, 0xa2, 0x50, 0x16, 0xaa, 0xd9, 0x46, 0x7a, 0x78, 0x56, 0x4a, 0x3c, 0xde, 0x56,
 | 
			
		||||
	0x12, 0x5a, 0x9b, 0x1c, 0x42, 0x5a, 0x57, 0x9b, 0xa8, 0x53, 0x31, 0x51, 0x4e, 0x56, 0x73, 0xf5,
 | 
			
		||||
	0x55, 0xf9, 0x97, 0x5f, 0x55, 0x1e, 0xb1, 0xca, 0xfb, 0x1c, 0xba, 0x63, 0x32, 0x67, 0xa0, 0xf8,
 | 
			
		||||
	0x3c, 0x24, 0x0f, 0x8b, 0x9a, 0xa1, 0x76, 0x50, 0x4c, 0xba, 0xc5, 0x14, 0x2f, 0x20, 0x4f, 0x21,
 | 
			
		||||
	0xe3, 0xf4, 0x4c, 0x57, 0xa3, 0x98, 0x2a, 0x0b, 0xd5, 0x5c, 0xfd, 0xfe, 0x5c, 0x85, 0x14, 0x0f,
 | 
			
		||||
	0xab, 0x04, 0x24, 0xa4, 0x0a, 0x29, 0x6a, 0x63, 0x4b, 0x5c, 0xe4, 0x64, 0x79, 0xd9, 0x73, 0x43,
 | 
			
		||||
	0x0e, 0xdc, 0x90, 0x37, 0xcd, 0x81, 0xc2, 0x33, 0x48, 0x19, 0x72, 0xd4, 0x54, 0x6d, 0x7a, 0x62,
 | 
			
		||||
	0x31, 0x86, 0x8e, 0x98, 0xe6, 0xaa, 0xa2, 0x1f, 0x91, 0x65, 0xf8, 0x2b, 0x08, 0x8f, 0xba, 0x38,
 | 
			
		||||
	0x10, 0x33, 0x97, 0x53, 0x9e, 0xe0, 0x80, 0x6c, 0x01, 0xb4, 0x1c, 0x54, 0x19, 0xb6, 0x8f, 0x54,
 | 
			
		||||
	0x26, 0x2e, 0xf1, 0xa2, 0xd2, 0x44, 0xd1, 0xe7, 0x41, 0x0b, 0x1a, 0x4b, 0xa7, 0x67, 0xa5, 0x85,
 | 
			
		||||
	0x4f, 0xdf, 0x4b, 0x82, 0x92, 0xf5, 0x71, 0x9b, 0xcc, 0x25, 0xe9, 0xd9, 0xed, 0x80, 0x24, 0x3b,
 | 
			
		||||
	0x0f, 0x89, 0x8f, 0xdb, 0x64, 0xa4, 0x09, 0x80, 0xef, 0x18, 0x9a, 0x54, 0xb3, 0x4c, 0x2a, 0x02,
 | 
			
		||||
	0x6f, 0xda, 0xa3, 0xb9, 0xbc, 0xdc, 0x19, 0xc1, 0x79, 0xe3, 0x1a, 0x29, 0xb7, 0x8c, 0x12, 0x61,
 | 
			
		||||
	0x95, 0xd6, 0x20, 0x17, 0xe9, 0x2c, 0xf9, 0x07, 0x92, 0xae, 0x2d, 0x7c, 0x78, 0x14, 0xf7, 0xe8,
 | 
			
		||||
	0xf6, 0xb8, 0xaf, 0xea, 0x3d, 0x14, 0x13, 0x5e, 0x8f, 0x79, 0xb0, 0x9e, 0x58, 0x15, 0xa4, 0x03,
 | 
			
		||||
	0xc8, 0xf8, 0xbd, 0x22, 0x04, 0x52, 0xa6, 0x6a, 0xa0, 0x8f, 0xe3, 0x67, 0x22, 0x43, 0xc6, 0xb2,
 | 
			
		||||
	0x19, 0x97, 0x9e, 0xf8, 0x49, 0xe7, 0x82, 0x24, 0xe9, 0x19, 0xfc, 0x3d, 0x26, 0x37, 0x46, 0xcd,
 | 
			
		||||
	0xad, 0xa8, 0x9a, 0x69, 0x94, 0xa1, 0xc6, 0xca, 0x1d, 0xf8, 0x77, 0x0f, 0xd9, 0xc8, 0x10, 0x05,
 | 
			
		||||
	0xdf, 0xf6, 0x90, 0xb2, 0x69, 0x2b, 0x52, 0x39, 0x81, 0xfc, 0xe5, 0x74, 0x6a, 0x5b, 0x26, 0x45,
 | 
			
		||||
	0x72, 0x08, 0xd9, 0x91, 0xc5, 0x1c, 0x96, 0xab, 0xdf, 0x9e, 0xa7, 0x11, 0xbe, 0xf1, 0x21, 0x49,
 | 
			
		||||
	0x65, 0x05, 0xfe, 0xdb, 0xd7, 0x68, 0x58, 0x8a, 0x06, 0xd2, 0x44, 0xc8, 0x1c, 0x6b, 0x3a, 0x43,
 | 
			
		||||
	0x87, 0x8a, 0x42, 0x39, 0x59, 0xcd, 0x2a, 0x41, 0x58, 0xd1, 0xa1, 0x30, 0x0e, 0xf1, 0xe5, 0x29,
 | 
			
		||||
	0x00, 0x61, 0x61, 0x0e, 0xbb, 0x9a, 0xbe, 0x08, 0x4b, 0xe5, 0x0d, 0x14, 0xb6, 0xf8, 0x38, 0x4f,
 | 
			
		||||
	0x98, 0xf7, 0xe7, 0xcd, 0xe8, 0xc2, 0xff, 0x13, 0xb5, 0xae, 0xcd, 0xf9, 0x2f, 0x02, 0x14, 0x5e,
 | 
			
		||||
	0xf0, 0x1d, 0xbb, 0xfe, 0x6f, 0x46, 0x36, 0x20, 0xe7, 0xed, 0x33, 0x7f, 0xcf, 0xfd, 0xa9, 0x9d,
 | 
			
		||||
	0x7c, 0x08, 0x76, 0xdd, 0x27, 0xff, 0x40, 0xa5, 0x5d, 0xc5, 0x7f, 0x36, 0xdc, 0xb3, 0x6b, 0xcb,
 | 
			
		||||
	0x84, 0xd0, 0x6b, 0xb3, 0xe5, 0x2e, 0x14, 0xb6, 0x51, 0xc7, 0x18, 0x57, 0xa6, 0x2c, 0x4b, 0xfd,
 | 
			
		||||
	0x3c, 0x05, 0x10, 0x0e, 0x23, 0xe9, 0x43, 0x72, 0x0f, 0x19, 0x79, 0x30, 0x83, 0x8c, 0x98, 0x95,
 | 
			
		||||
	0x94, 0x1e, 0xce, 0x8d, 0xf3, 0xad, 0x78, 0x0f, 0x29, 0x77, 0x2d, 0xc8, 0x2c, 0x3f, 0x67, 0xb1,
 | 
			
		||||
	0x2b, 0x27, 0xad, 0x5d, 0x01, 0xe9, 0x17, 0xff, 0x00, 0x69, 0x6f, 0x72, 0xc9, 0x2c, 0x24, 0xf1,
 | 
			
		||||
	0x0b, 0x25, 0xad, 0x5f, 0x05, 0x1a, 0x0a, 0xf0, 0x66, 0x64, 0x26, 0x01, 0xf1, 0x73, 0x3f, 0x93,
 | 
			
		||||
	0x80, 0x69, 0x93, 0xf8, 0x0a, 0xd2, 0xde, 0xdc, 0xcc, 0x24, 0x20, 0x7e, 0xc4, 0xa4, 0xc2, 0xc4,
 | 
			
		||||
	0x46, 0xec, 0xb8, 0xff, 0x90, 0x1a, 0xaf, 0x4f, 0x2f, 0x8a, 0x0b, 0xdf, 0x2e, 0x8a, 0x0b, 0x1f,
 | 
			
		||||
	0x87, 0x45, 0xe1, 0x74, 0x58, 0x14, 0xbe, 0x0e, 0x8b, 0xc2, 0xf9, 0xb0, 0x28, 0xbc, 0xdc, 0xfd,
 | 
			
		||||
	0x8d, 0x3f, 0x7d, 0x1b, 0x61, 0xd4, 0x4c, 0xf3, 0x8a, 0xf7, 0x7e, 0x04, 0x00, 0x00, 0xff, 0xff,
 | 
			
		||||
	0x17, 0x73, 0xba, 0x43, 0x45, 0x0a, 0x00, 0x00,
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x56, 0xcd, 0x72, 0xd2, 0x50,
 | 
			
		||||
	0x14, 0x26, 0x81, 0x86, 0x72, 0x70, 0x46, 0xe7, 0x8a, 0x18, 0xe3, 0x0c, 0x50, 0x56, 0x8c, 0xa3,
 | 
			
		||||
	0xc1, 0xa2, 0xa3, 0xfd, 0x71, 0x53, 0xfa, 0x37, 0x8e, 0xad, 0xd3, 0x89, 0x3a, 0xe3, 0xe8, 0xa2,
 | 
			
		||||
	0x06, 0xb8, 0xa5, 0x91, 0xfc, 0x99, 0x7b, 0x61, 0x64, 0x5c, 0xe8, 0x23, 0xb8, 0xf3, 0x11, 0x7c,
 | 
			
		||||
	0x95, 0x2e, 0x5d, 0xba, 0xaa, 0x2d, 0x4f, 0xe2, 0xe4, 0x26, 0x21, 0x29, 0x04, 0x85, 0x2a, 0xbb,
 | 
			
		||||
	0x7b, 0xb8, 0xe7, 0xfb, 0xce, 0xc7, 0x77, 0xce, 0xb9, 0x00, 0x7b, 0x6d, 0x8d, 0x1e, 0x77, 0x1b,
 | 
			
		||||
	0x72, 0xd3, 0x32, 0xaa, 0x4d, 0xcb, 0xa4, 0xaa, 0x66, 0x62, 0xa7, 0x15, 0x3d, 0xaa, 0xb6, 0x56,
 | 
			
		||||
	0x25, 0xd8, 0xe9, 0x69, 0x4d, 0x4c, 0xc2, 0xcf, 0x49, 0xb5, 0xb7, 0x1c, 0x89, 0x64, 0xdb, 0xb1,
 | 
			
		||||
	0xa8, 0x85, 0x96, 0x42, 0x9c, 0x1c, 0x60, 0xe4, 0x48, 0x56, 0x6f, 0x59, 0xca, 0xb5, 0xad, 0xb6,
 | 
			
		||||
	0xc5, 0xb2, 0xab, 0xee, 0xc9, 0x03, 0x4a, 0xb7, 0xda, 0x96, 0xd5, 0xd6, 0x71, 0x95, 0x45, 0x8d,
 | 
			
		||||
	0xee, 0x51, 0x55, 0x35, 0xfb, 0xfe, 0xd5, 0xed, 0xd1, 0x2b, 0x6c, 0xd8, 0x34, 0xb8, 0x2c, 0x8d,
 | 
			
		||||
	0x5e, 0x1e, 0x69, 0x58, 0x6f, 0x1d, 0x1a, 0x2a, 0xe9, 0xf8, 0x19, 0xc5, 0xd1, 0x0c, 0xaa, 0x19,
 | 
			
		||||
	0x98, 0x50, 0xd5, 0xb0, 0xbd, 0x84, 0xf2, 0x37, 0x01, 0x32, 0x9b, 0x81, 0x44, 0x94, 0x07, 0x5e,
 | 
			
		||||
	0x6b, 0x89, 0x5c, 0x89, 0xab, 0x64, 0xea, 0xc2, 0xe0, 0xb4, 0xc8, 0x3f, 0xdd, 0x52, 0x78, 0xad,
 | 
			
		||||
	0x85, 0x0e, 0x40, 0xd0, 0xd5, 0x06, 0xd6, 0x89, 0xc8, 0x97, 0x92, 0x95, 0x6c, 0x6d, 0x45, 0xfe,
 | 
			
		||||
	0xeb, 0x57, 0x95, 0x87, 0xac, 0xf2, 0x1e, 0x83, 0x6e, 0x9b, 0xd4, 0xe9, 0x2b, 0x3e, 0x0f, 0xca,
 | 
			
		||||
	0xc1, 0x82, 0x66, 0xa8, 0x6d, 0x2c, 0x26, 0xdd, 0x62, 0x8a, 0x17, 0xa0, 0xe7, 0x90, 0x76, 0xba,
 | 
			
		||||
	0xa6, 0xab, 0x51, 0x4c, 0x95, 0xb8, 0x4a, 0xb6, 0xf6, 0x70, 0xa6, 0x42, 0x8a, 0x87, 0x55, 0x02,
 | 
			
		||||
	0x12, 0x54, 0x81, 0x14, 0xb1, 0x71, 0x53, 0x5c, 0x60, 0x64, 0x39, 0xd9, 0x73, 0x43, 0x0e, 0xdc,
 | 
			
		||||
	0x90, 0x37, 0xcc, 0xbe, 0xc2, 0x32, 0x50, 0x09, 0xb2, 0xc4, 0x54, 0x6d, 0x72, 0x6c, 0x51, 0x8a,
 | 
			
		||||
	0x1d, 0x51, 0x60, 0xaa, 0xa2, 0x1f, 0xa1, 0x25, 0xb8, 0x12, 0x84, 0x87, 0x1d, 0xdc, 0x17, 0xd3,
 | 
			
		||||
	0x17, 0x53, 0x9e, 0xe1, 0x3e, 0xda, 0x04, 0x68, 0x3a, 0x58, 0xa5, 0xb8, 0x75, 0xa8, 0x52, 0x71,
 | 
			
		||||
	0x91, 0x15, 0x95, 0xc6, 0x8a, 0xbe, 0x0c, 0x5a, 0x50, 0x5f, 0x3c, 0x39, 0x2d, 0x26, 0xbe, 0xfe,
 | 
			
		||||
	0x2a, 0x72, 0x4a, 0xc6, 0xc7, 0x6d, 0x50, 0x97, 0xa4, 0x6b, 0xb7, 0x02, 0x92, 0xcc, 0x2c, 0x24,
 | 
			
		||||
	0x3e, 0x6e, 0x83, 0xa2, 0x06, 0x00, 0xfe, 0x48, 0xb1, 0x49, 0x34, 0xcb, 0x24, 0x22, 0xb0, 0xa6,
 | 
			
		||||
	0x3d, 0x99, 0xc9, 0xcb, 0xed, 0x21, 0x9c, 0x35, 0xae, 0x9e, 0x72, 0xcb, 0x28, 0x11, 0x56, 0x69,
 | 
			
		||||
	0x15, 0xb2, 0x91, 0xce, 0xa2, 0x6b, 0x90, 0x74, 0x6d, 0x61, 0xc3, 0xa3, 0xb8, 0x47, 0xb7, 0xc7,
 | 
			
		||||
	0x3d, 0x55, 0xef, 0x62, 0x91, 0xf7, 0x7a, 0xcc, 0x82, 0x35, 0x7e, 0x85, 0x93, 0xf6, 0x21, 0xed,
 | 
			
		||||
	0xf7, 0x0a, 0x21, 0x48, 0x99, 0xaa, 0x81, 0x7d, 0x1c, 0x3b, 0x23, 0x19, 0xd2, 0x96, 0x4d, 0x99,
 | 
			
		||||
	0x74, 0xfe, 0x0f, 0x9d, 0x0b, 0x92, 0xa4, 0x17, 0x70, 0x75, 0x44, 0x6e, 0x8c, 0x9a, 0x3b, 0x51,
 | 
			
		||||
	0x35, 0x93, 0x28, 0x43, 0x8d, 0xe5, 0x7b, 0x70, 0x7d, 0x17, 0xd3, 0xa1, 0x21, 0x0a, 0xfe, 0xd0,
 | 
			
		||||
	0xc5, 0x84, 0x4e, 0x5a, 0x91, 0xf2, 0x31, 0xe4, 0x2e, 0xa6, 0x13, 0xdb, 0x32, 0x09, 0x46, 0x07,
 | 
			
		||||
	0x90, 0x19, 0x5a, 0xcc, 0x60, 0xd9, 0xda, 0xdd, 0x59, 0x1a, 0xe1, 0x1b, 0x1f, 0x92, 0x94, 0x97,
 | 
			
		||||
	0xe1, 0xc6, 0x9e, 0x46, 0xc2, 0x52, 0x24, 0x90, 0x26, 0x42, 0xfa, 0x48, 0xd3, 0x29, 0x76, 0x88,
 | 
			
		||||
	0xc8, 0x95, 0x92, 0x95, 0x8c, 0x12, 0x84, 0x65, 0x1d, 0xf2, 0xa3, 0x10, 0x5f, 0x9e, 0x02, 0x10,
 | 
			
		||||
	0x16, 0x66, 0xb0, 0xcb, 0xe9, 0x8b, 0xb0, 0x94, 0xdf, 0x43, 0x7e, 0x93, 0x8d, 0xf3, 0x98, 0x79,
 | 
			
		||||
	0xff, 0xdf, 0x8c, 0x0e, 0xdc, 0x1c, 0xab, 0x35, 0x37, 0xe7, 0xbf, 0x73, 0x90, 0x7f, 0xc5, 0x76,
 | 
			
		||||
	0x6c, 0xfe, 0xdf, 0x0c, 0xad, 0x43, 0xd6, 0xdb, 0x67, 0xf6, 0x9e, 0xfb, 0x53, 0x3b, 0xfe, 0x10,
 | 
			
		||||
	0xec, 0xb8, 0x4f, 0xfe, 0xbe, 0x4a, 0x3a, 0x8a, 0xff, 0x6c, 0xb8, 0x67, 0xd7, 0x96, 0x31, 0xa1,
 | 
			
		||||
	0x73, 0xb3, 0xe5, 0x3e, 0xe4, 0xb7, 0xb0, 0x8e, 0x63, 0x5c, 0x99, 0xb0, 0x2c, 0xb5, 0xb3, 0x14,
 | 
			
		||||
	0x40, 0x38, 0x8c, 0xa8, 0x07, 0xc9, 0x5d, 0x4c, 0xd1, 0xa3, 0x29, 0x64, 0xc4, 0xac, 0xa4, 0xf4,
 | 
			
		||||
	0x78, 0x66, 0x9c, 0x6f, 0xc5, 0x27, 0x48, 0xb9, 0x6b, 0x81, 0xa6, 0xf9, 0x39, 0x8b, 0x5d, 0x39,
 | 
			
		||||
	0x69, 0xf5, 0x12, 0x48, 0xbf, 0xf8, 0x67, 0x10, 0xbc, 0xc9, 0x45, 0xd3, 0x90, 0xc4, 0x2f, 0x94,
 | 
			
		||||
	0xb4, 0x76, 0x19, 0x68, 0x28, 0xc0, 0x9b, 0x91, 0xa9, 0x04, 0xc4, 0xcf, 0xfd, 0x54, 0x02, 0x26,
 | 
			
		||||
	0x4d, 0xe2, 0x5b, 0x10, 0xbc, 0xb9, 0x99, 0x4a, 0x40, 0xfc, 0x88, 0x49, 0xf9, 0xb1, 0x8d, 0xd8,
 | 
			
		||||
	0x76, 0xff, 0x21, 0xd5, 0xdf, 0x9d, 0x9c, 0x17, 0x12, 0x3f, 0xcf, 0x0b, 0x89, 0x2f, 0x83, 0x02,
 | 
			
		||||
	0x77, 0x32, 0x28, 0x70, 0x3f, 0x06, 0x05, 0xee, 0x6c, 0x50, 0xe0, 0xde, 0xec, 0xfc, 0xc3, 0x9f,
 | 
			
		||||
	0xbe, 0xf5, 0x30, 0x7a, 0x9d, 0x68, 0x08, 0xac, 0xe6, 0x83, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff,
 | 
			
		||||
	0x95, 0x94, 0x84, 0xf2, 0x47, 0x0a, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/containers/v1/containers.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/containers/v1/containers.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@ syntax = "proto3";
 | 
			
		||||
 | 
			
		||||
package containerd.services.containers.v1;
 | 
			
		||||
 | 
			
		||||
import "gogoproto/gogo.proto";
 | 
			
		||||
import weak "gogoproto/gogo.proto";
 | 
			
		||||
import "google/protobuf/any.proto";
 | 
			
		||||
import "google/protobuf/empty.proto";
 | 
			
		||||
import "google/protobuf/field_mask.proto";
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/tasks/v1/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/tasks/v1/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -14,10 +14,8 @@ go_library(
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/containerd/containerd/api/types:go_default_library",
 | 
			
		||||
        "//vendor/github.com/containerd/containerd/api/types/task:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/proto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/types:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/empty:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/go-digest:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/net/context:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/grpc:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										194
									
								
								vendor/github.com/containerd/containerd/api/services/tasks/v1/tasks.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										194
									
								
								vendor/github.com/containerd/containerd/api/services/tasks/v1/tasks.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
// Code generated by protoc-gen-gogo.
 | 
			
		||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
 | 
			
		||||
// source: github.com/containerd/containerd/api/services/tasks/v1/tasks.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	Package tasks is a generated protocol buffer package.
 | 
			
		||||
@@ -42,9 +41,10 @@ package tasks
 | 
			
		||||
import proto "github.com/gogo/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
import google_protobuf "github.com/golang/protobuf/ptypes/empty"
 | 
			
		||||
import google_protobuf "github.com/gogo/protobuf/types"
 | 
			
		||||
import google_protobuf1 "github.com/gogo/protobuf/types"
 | 
			
		||||
import _ "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
// skipping weak import gogoproto "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
import containerd_types "github.com/containerd/containerd/api/types"
 | 
			
		||||
import containerd_types1 "github.com/containerd/containerd/api/types"
 | 
			
		||||
import containerd_types2 "github.com/containerd/containerd/api/types"
 | 
			
		||||
@@ -1890,24 +1890,6 @@ func (m *WaitResponse) MarshalTo(dAtA []byte) (int, error) {
 | 
			
		||||
	return i, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func encodeFixed64Tasks(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	dAtA[offset+4] = uint8(v >> 32)
 | 
			
		||||
	dAtA[offset+5] = uint8(v >> 40)
 | 
			
		||||
	dAtA[offset+6] = uint8(v >> 48)
 | 
			
		||||
	dAtA[offset+7] = uint8(v >> 56)
 | 
			
		||||
	return offset + 8
 | 
			
		||||
}
 | 
			
		||||
func encodeFixed32Tasks(dAtA []byte, offset int, v uint32) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	return offset + 4
 | 
			
		||||
}
 | 
			
		||||
func encodeVarintTasks(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	for v >= 1<<7 {
 | 
			
		||||
		dAtA[offset] = uint8(v&0x7f | 0x80)
 | 
			
		||||
@@ -5725,88 +5707,88 @@ func init() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var fileDescriptorTasks = []byte{
 | 
			
		||||
	// 1317 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x5b, 0x6f, 0x1b, 0x45,
 | 
			
		||||
	0x1b, 0xee, 0xfa, 0xec, 0xd7, 0x49, 0x9b, 0xec, 0x97, 0xe6, 0x33, 0x4b, 0x15, 0x87, 0xe5, 0xc6,
 | 
			
		||||
	0x04, 0xba, 0x4b, 0x5d, 0x54, 0x21, 0x5a, 0x21, 0x35, 0x07, 0x22, 0x0b, 0xaa, 0xa6, 0xdb, 0x72,
 | 
			
		||||
	0x50, 0x25, 0x14, 0xb6, 0xbb, 0x13, 0x67, 0x14, 0x7b, 0x67, 0xbb, 0x33, 0x4e, 0x1b, 0xb8, 0x80,
 | 
			
		||||
	0x9f, 0xd0, 0x5b, 0x6e, 0xf8, 0x3d, 0xb9, 0xe4, 0x12, 0xa1, 0x2a, 0x50, 0xff, 0x0b, 0xee, 0xd0,
 | 
			
		||||
	0x1c, 0x76, 0xb3, 0xb1, 0x63, 0xaf, 0x93, 0x34, 0xdc, 0xb4, 0x33, 0xb3, 0xef, 0x69, 0x9e, 0x79,
 | 
			
		||||
	0x0f, 0x8f, 0x03, 0xab, 0x1d, 0xcc, 0x76, 0xfb, 0xcf, 0x2c, 0x8f, 0xf4, 0x6c, 0x8f, 0x04, 0xcc,
 | 
			
		||||
	0xc5, 0x01, 0x8a, 0xfc, 0xf4, 0xd2, 0x0d, 0xb1, 0x4d, 0x51, 0xb4, 0x8f, 0x3d, 0x44, 0x6d, 0xe6,
 | 
			
		||||
	0xd2, 0x3d, 0x6a, 0xef, 0xdf, 0x92, 0x0b, 0x2b, 0x8c, 0x08, 0x23, 0xfa, 0x8d, 0x63, 0x69, 0x2b,
 | 
			
		||||
	0x96, 0xb4, 0xa4, 0xc0, 0xfe, 0x2d, 0xe3, 0xdd, 0x0e, 0x21, 0x9d, 0x2e, 0xb2, 0x85, 0xec, 0xb3,
 | 
			
		||||
	0xfe, 0x8e, 0x8d, 0x7a, 0x21, 0x3b, 0x90, 0xaa, 0xc6, 0x3b, 0xc3, 0x1f, 0xdd, 0x20, 0xfe, 0xb4,
 | 
			
		||||
	0xd0, 0x21, 0x1d, 0x22, 0x96, 0x36, 0x5f, 0xa9, 0xd3, 0x3b, 0x53, 0xc5, 0xcb, 0x0e, 0x42, 0x44,
 | 
			
		||||
	0xed, 0x1e, 0xe9, 0x07, 0x4c, 0xe9, 0x7d, 0x7a, 0x16, 0x3d, 0xc4, 0x22, 0xec, 0xa9, 0xdb, 0x19,
 | 
			
		||||
	0x77, 0xcf, 0xa0, 0xe9, 0x23, 0xea, 0x45, 0x38, 0x64, 0x24, 0x52, 0xca, 0x9f, 0x9d, 0x41, 0x99,
 | 
			
		||||
	0x23, 0x26, 0xfe, 0x51, 0xba, 0x8d, 0x61, 0x6c, 0x18, 0xee, 0x21, 0xca, 0xdc, 0x5e, 0x28, 0x05,
 | 
			
		||||
	0xcc, 0xc3, 0x1c, 0xcc, 0xaf, 0x45, 0xc8, 0x65, 0xe8, 0x89, 0x4b, 0xf7, 0x1c, 0xf4, 0xbc, 0x8f,
 | 
			
		||||
	0x28, 0xd3, 0x5b, 0x30, 0x93, 0x98, 0xdf, 0xc6, 0x7e, 0x5d, 0x5b, 0xd6, 0x9a, 0xd5, 0xd5, 0x6b,
 | 
			
		||||
	0x83, 0xa3, 0x46, 0x6d, 0x2d, 0x3e, 0x6f, 0xaf, 0x3b, 0xb5, 0x44, 0xa8, 0xed, 0xeb, 0x36, 0x94,
 | 
			
		||||
	0x22, 0x42, 0xd8, 0x0e, 0xad, 0xe7, 0x97, 0xf3, 0xcd, 0x5a, 0xeb, 0xff, 0x56, 0xea, 0x49, 0x45,
 | 
			
		||||
	0x74, 0xd6, 0x03, 0x0e, 0xa6, 0xa3, 0xc4, 0xf4, 0x05, 0x28, 0x52, 0xe6, 0xe3, 0xa0, 0x5e, 0xe0,
 | 
			
		||||
	0xd6, 0x1d, 0xb9, 0xd1, 0x17, 0xa1, 0x44, 0x99, 0x4f, 0xfa, 0xac, 0x5e, 0x14, 0xc7, 0x6a, 0xa7,
 | 
			
		||||
	0xce, 0x51, 0x14, 0xd5, 0x4b, 0xc9, 0x39, 0x8a, 0x22, 0xdd, 0x80, 0x0a, 0x43, 0x51, 0x0f, 0x07,
 | 
			
		||||
	0x6e, 0xb7, 0x5e, 0x5e, 0xd6, 0x9a, 0x15, 0x27, 0xd9, 0xeb, 0xf7, 0x00, 0xbc, 0x5d, 0xe4, 0xed,
 | 
			
		||||
	0x85, 0x04, 0x07, 0xac, 0x5e, 0x59, 0xd6, 0x9a, 0xb5, 0xd6, 0x8d, 0xd1, 0xb0, 0xd6, 0x13, 0xc4,
 | 
			
		||||
	0x9d, 0x94, 0xbc, 0x6e, 0x41, 0x99, 0x84, 0x0c, 0x93, 0x80, 0xd6, 0xab, 0x42, 0x75, 0xc1, 0x92,
 | 
			
		||||
	0x68, 0x5a, 0x31, 0x9a, 0xd6, 0xfd, 0xe0, 0xc0, 0x89, 0x85, 0xcc, 0xa7, 0xa0, 0xa7, 0x91, 0xa4,
 | 
			
		||||
	0x21, 0x09, 0x28, 0x3a, 0x17, 0x94, 0x73, 0x90, 0x0f, 0xb1, 0x5f, 0xcf, 0x2d, 0x6b, 0xcd, 0x59,
 | 
			
		||||
	0x87, 0x2f, 0xcd, 0x0e, 0xcc, 0x3c, 0x66, 0x6e, 0xc4, 0x2e, 0xf2, 0x40, 0xef, 0x43, 0x19, 0xbd,
 | 
			
		||||
	0x44, 0xde, 0xb6, 0xb2, 0x5c, 0x5d, 0x85, 0xc1, 0x51, 0xa3, 0xb4, 0xf1, 0x12, 0x79, 0xed, 0x75,
 | 
			
		||||
	0xa7, 0xc4, 0x3f, 0xb5, 0x7d, 0xf3, 0x3d, 0x98, 0x55, 0x8e, 0x54, 0xfc, 0x2a, 0x16, 0xed, 0x38,
 | 
			
		||||
	0x96, 0x4d, 0x98, 0x5f, 0x47, 0x5d, 0x74, 0xe1, 0x8c, 0x31, 0x7f, 0xd3, 0xe0, 0xaa, 0xb4, 0x94,
 | 
			
		||||
	0x78, 0x5b, 0x84, 0x5c, 0xa2, 0x5c, 0x1a, 0x1c, 0x35, 0x72, 0xed, 0x75, 0x27, 0x87, 0x4f, 0x41,
 | 
			
		||||
	0x44, 0x6f, 0x40, 0x0d, 0xbd, 0xc4, 0x6c, 0x9b, 0x32, 0x97, 0xf5, 0x79, 0xce, 0xf1, 0x2f, 0xc0,
 | 
			
		||||
	0x8f, 0x1e, 0x8b, 0x13, 0xfd, 0x3e, 0x54, 0xf9, 0x0e, 0xf9, 0xdb, 0x2e, 0x13, 0x29, 0x56, 0x6b,
 | 
			
		||||
	0x19, 0x23, 0x0f, 0xf8, 0x24, 0x2e, 0x87, 0xd5, 0xca, 0xe1, 0x51, 0xe3, 0xca, 0xab, 0xbf, 0x1a,
 | 
			
		||||
	0x9a, 0x53, 0x91, 0x6a, 0xf7, 0x99, 0x49, 0x60, 0x41, 0xc6, 0xb7, 0x15, 0x11, 0x0f, 0x51, 0x7a,
 | 
			
		||||
	0xe9, 0xe8, 0x23, 0x80, 0x4d, 0x74, 0xf9, 0x8f, 0xbc, 0x01, 0x35, 0xe1, 0x46, 0x81, 0x7e, 0x07,
 | 
			
		||||
	0xca, 0xa1, 0xbc, 0xa0, 0x70, 0x31, 0x54, 0x23, 0xfb, 0xb7, 0x54, 0x99, 0xc4, 0x20, 0xc4, 0xc2,
 | 
			
		||||
	0xe6, 0x0a, 0xcc, 0x7d, 0x85, 0x29, 0xe3, 0x69, 0x90, 0x40, 0xb3, 0x08, 0xa5, 0x1d, 0xdc, 0x65,
 | 
			
		||||
	0x28, 0x92, 0xd1, 0x3a, 0x6a, 0xc7, 0x93, 0x26, 0x25, 0x9b, 0xd4, 0x46, 0x51, 0xb4, 0xf8, 0xba,
 | 
			
		||||
	0x26, 0x3a, 0xc6, 0x64, 0xb7, 0x52, 0xd4, 0x7c, 0xa5, 0x41, 0xed, 0x4b, 0xdc, 0xed, 0x5e, 0x36,
 | 
			
		||||
	0x48, 0xa2, 0xe1, 0xe0, 0x0e, 0x6f, 0x2b, 0x32, 0xb7, 0xd4, 0x8e, 0xa7, 0xa2, 0xdb, 0xed, 0x8a,
 | 
			
		||||
	0x8c, 0xaa, 0x38, 0x7c, 0x69, 0xfe, 0xa3, 0x81, 0xce, 0x95, 0xdf, 0x42, 0x96, 0x24, 0x3d, 0x31,
 | 
			
		||||
	0x77, 0x7a, 0x4f, 0xcc, 0x8f, 0xe9, 0x89, 0x85, 0xb1, 0x3d, 0xb1, 0x38, 0xd4, 0x13, 0x9b, 0x50,
 | 
			
		||||
	0xa0, 0x21, 0xf2, 0x44, 0x17, 0x1d, 0xd7, 0xd2, 0x84, 0x44, 0x1a, 0xa5, 0xf2, 0xd8, 0x54, 0xba,
 | 
			
		||||
	0x0e, 0xff, 0x3b, 0x71, 0x75, 0xf9, 0xb2, 0xe6, 0xaf, 0x1a, 0xcc, 0x39, 0x88, 0xe2, 0x1f, 0xd1,
 | 
			
		||||
	0x16, 0x3b, 0xb8, 0xf4, 0xa7, 0x5a, 0x80, 0xe2, 0x0b, 0xec, 0xb3, 0x5d, 0xf5, 0x52, 0x72, 0xc3,
 | 
			
		||||
	0xd1, 0xd9, 0x45, 0xb8, 0xb3, 0x2b, 0xab, 0x7f, 0xd6, 0x51, 0x3b, 0xf3, 0x67, 0xb8, 0xba, 0xd6,
 | 
			
		||||
	0x25, 0x14, 0xb5, 0x1f, 0xfe, 0x17, 0x81, 0xc9, 0xe7, 0xcc, 0x8b, 0x57, 0x90, 0x1b, 0xf3, 0x0b,
 | 
			
		||||
	0x98, 0xdb, 0x72, 0xfb, 0xf4, 0xc2, 0xfd, 0x73, 0x13, 0xe6, 0x1d, 0x44, 0xfb, 0xbd, 0x0b, 0x1b,
 | 
			
		||||
	0xda, 0x80, 0x6b, 0xbc, 0x38, 0xb7, 0xb0, 0x7f, 0x91, 0xe4, 0x35, 0x1d, 0xd9, 0x0f, 0xa4, 0x19,
 | 
			
		||||
	0x55, 0xe2, 0x9f, 0x43, 0x55, 0xb5, 0x0b, 0x14, 0x97, 0xf9, 0xf2, 0xa4, 0x32, 0x6f, 0x07, 0x3b,
 | 
			
		||||
	0xc4, 0x39, 0x56, 0x31, 0x5f, 0x6b, 0x70, 0x7d, 0x2d, 0x99, 0xc9, 0x17, 0xe5, 0x28, 0xdb, 0x30,
 | 
			
		||||
	0x1f, 0xba, 0x11, 0x0a, 0xd8, 0x76, 0x8a, 0x17, 0xc8, 0xe7, 0x6b, 0xf1, 0xfe, 0xff, 0xe7, 0x51,
 | 
			
		||||
	0x63, 0x25, 0xc5, 0xb6, 0x48, 0x88, 0x82, 0x44, 0x9d, 0xda, 0x1d, 0x72, 0xd3, 0xc7, 0x1d, 0x44,
 | 
			
		||||
	0x99, 0xb5, 0x2e, 0xfe, 0x73, 0xe6, 0xa4, 0xb1, 0xb5, 0x53, 0x39, 0x43, 0x7e, 0x1a, 0xce, 0xf0,
 | 
			
		||||
	0x1d, 0x2c, 0x0e, 0xdf, 0x2e, 0x01, 0xae, 0x76, 0xcc, 0x04, 0x4f, 0xed, 0x90, 0x23, 0xe4, 0x25,
 | 
			
		||||
	0xad, 0x60, 0xfe, 0x04, 0xf3, 0x5f, 0x87, 0xfe, 0x5b, 0xe0, 0x75, 0x2d, 0xa8, 0x46, 0x88, 0x92,
 | 
			
		||||
	0x7e, 0xe4, 0x21, 0x2a, 0xb0, 0x1a, 0x77, 0xa9, 0x63, 0x31, 0x73, 0x05, 0xae, 0x3e, 0x90, 0x04,
 | 
			
		||||
	0x38, 0xf6, 0x5c, 0x87, 0xb2, 0x9c, 0x04, 0xf2, 0x2a, 0x55, 0x27, 0xde, 0xf2, 0xe4, 0x4b, 0x64,
 | 
			
		||||
	0x93, 0xb9, 0x50, 0x56, 0xfc, 0x59, 0xdd, 0xbb, 0x7e, 0x0a, 0x97, 0x14, 0x02, 0x4e, 0x2c, 0x68,
 | 
			
		||||
	0xee, 0x40, 0xed, 0x5b, 0x17, 0x5f, 0xfe, 0xec, 0x8c, 0x60, 0x46, 0xfa, 0x51, 0xb1, 0x0e, 0xf1,
 | 
			
		||||
	0x10, 0x6d, 0x32, 0x0f, 0xc9, 0x9d, 0x87, 0x87, 0xb4, 0x5e, 0xcf, 0x40, 0x51, 0x4c, 0x4e, 0x7d,
 | 
			
		||||
	0x0f, 0x4a, 0x92, 0x63, 0xea, 0xb6, 0x35, 0xe9, 0x17, 0x93, 0x35, 0xc2, 0xe9, 0x8d, 0x8f, 0xa7,
 | 
			
		||||
	0x57, 0x50, 0x57, 0xfb, 0x01, 0x8a, 0x82, 0x0b, 0xea, 0x2b, 0x93, 0x55, 0xd3, 0xcc, 0xd4, 0xf8,
 | 
			
		||||
	0x70, 0x2a, 0x59, 0xe5, 0xa1, 0x03, 0x25, 0x49, 0xb0, 0xb2, 0xae, 0x33, 0x42, 0x38, 0x8d, 0x8f,
 | 
			
		||||
	0xa6, 0x51, 0x48, 0x1c, 0x3d, 0x87, 0xd9, 0x13, 0x4c, 0x4e, 0x6f, 0x4d, 0xa3, 0x7e, 0x72, 0xa0,
 | 
			
		||||
	0x9f, 0xd1, 0xe5, 0x53, 0xc8, 0x6f, 0x22, 0xa6, 0x37, 0x27, 0x2b, 0x1d, 0xd3, 0x3d, 0xe3, 0x83,
 | 
			
		||||
	0x29, 0x24, 0x13, 0xdc, 0x0a, 0xbc, 0xd3, 0xea, 0xd6, 0x64, 0x95, 0x61, 0x76, 0x66, 0xd8, 0x53,
 | 
			
		||||
	0xcb, 0x2b, 0x47, 0x6d, 0x28, 0x70, 0xb2, 0xa5, 0x67, 0xc4, 0x96, 0x22, 0x64, 0xc6, 0xe2, 0x48,
 | 
			
		||||
	0x72, 0x6f, 0xf0, 0x1f, 0xeb, 0xfa, 0x16, 0x14, 0x78, 0x29, 0xe9, 0x19, 0x79, 0x38, 0x4a, 0xa4,
 | 
			
		||||
	0xc6, 0x5a, 0x7c, 0x0c, 0xd5, 0x84, 0x63, 0x64, 0x41, 0x31, 0x4c, 0x46, 0xc6, 0x1a, 0x7d, 0x08,
 | 
			
		||||
	0x65, 0xc5, 0x0e, 0xf4, 0x8c, 0xf7, 0x3e, 0x49, 0x22, 0x26, 0x18, 0x2c, 0x8a, 0x69, 0x9f, 0x15,
 | 
			
		||||
	0xe1, 0x30, 0x25, 0x18, 0x6b, 0xf0, 0x11, 0x94, 0xe4, 0xd8, 0xcf, 0x2a, 0x9a, 0x11, 0x72, 0x30,
 | 
			
		||||
	0xd6, 0x24, 0x86, 0x4a, 0x3c, 0xb9, 0xf5, 0x9b, 0xd9, 0x39, 0x92, 0x22, 0x0a, 0x86, 0x35, 0xad,
 | 
			
		||||
	0xb8, 0xca, 0xa8, 0x17, 0x00, 0xa9, 0x79, 0x79, 0x3b, 0x03, 0xe2, 0xd3, 0x26, 0xbf, 0xf1, 0xc9,
 | 
			
		||||
	0xd9, 0x94, 0x94, 0xe3, 0x47, 0x50, 0x92, 0x03, 0x31, 0x0b, 0xb6, 0x91, 0xb1, 0x39, 0x16, 0xb6,
 | 
			
		||||
	0x1d, 0x28, 0xab, 0xd1, 0x95, 0x95, 0x2b, 0x27, 0xa7, 0xa1, 0x71, 0x73, 0x4a, 0x69, 0x15, 0xfa,
 | 
			
		||||
	0xf7, 0x50, 0xe0, 0x33, 0x27, 0xab, 0x0a, 0x53, 0xf3, 0xcf, 0x58, 0x99, 0x46, 0x54, 0x9a, 0x5f,
 | 
			
		||||
	0xfd, 0xe6, 0xf0, 0xcd, 0xd2, 0x95, 0x3f, 0xde, 0x2c, 0x5d, 0xf9, 0x65, 0xb0, 0xa4, 0x1d, 0x0e,
 | 
			
		||||
	0x96, 0xb4, 0xdf, 0x07, 0x4b, 0xda, 0xdf, 0x83, 0x25, 0xed, 0xe9, 0xbd, 0xf3, 0xfd, 0x65, 0xef,
 | 
			
		||||
	0xae, 0x58, 0x3c, 0x2b, 0x09, 0xb8, 0x6e, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x67, 0xc5, 0x63,
 | 
			
		||||
	0x32, 0x20, 0x14, 0x00, 0x00,
 | 
			
		||||
	// 1318 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x4b, 0x6f, 0x1b, 0x45,
 | 
			
		||||
	0x1c, 0xef, 0xfa, 0xed, 0xbf, 0x93, 0x36, 0x59, 0xd2, 0x60, 0x96, 0x2a, 0x0e, 0xcb, 0xc5, 0x04,
 | 
			
		||||
	0xba, 0x4b, 0x5d, 0x54, 0x21, 0x5a, 0x21, 0x35, 0x0f, 0x22, 0x0b, 0xaa, 0xa6, 0xdb, 0x02, 0x55,
 | 
			
		||||
	0x25, 0x14, 0xb6, 0xbb, 0x13, 0x67, 0x14, 0x7b, 0x67, 0xbb, 0x33, 0x4e, 0x1b, 0x38, 0xc0, 0x47,
 | 
			
		||||
	0xe8, 0x95, 0x0b, 0x9f, 0x27, 0x47, 0x8e, 0x08, 0x55, 0x81, 0xfa, 0x5b, 0x70, 0x43, 0xf3, 0xd8,
 | 
			
		||||
	0xcd, 0xc6, 0x8e, 0xbd, 0x4e, 0xd3, 0x70, 0x69, 0x67, 0x66, 0xff, 0xaf, 0xf9, 0xcd, 0xff, 0xf1,
 | 
			
		||||
	0x73, 0x60, 0xb5, 0x83, 0xd9, 0x6e, 0xff, 0xa9, 0xe5, 0x91, 0x9e, 0xed, 0x91, 0x80, 0xb9, 0x38,
 | 
			
		||||
	0x40, 0x91, 0x9f, 0x5e, 0xba, 0x21, 0xb6, 0x29, 0x8a, 0xf6, 0xb1, 0x87, 0xa8, 0xcd, 0x5c, 0xba,
 | 
			
		||||
	0x47, 0xed, 0xfd, 0x1b, 0x72, 0x61, 0x85, 0x11, 0x61, 0x44, 0xbf, 0x76, 0x2c, 0x6d, 0xc5, 0x92,
 | 
			
		||||
	0x96, 0x14, 0xd8, 0xbf, 0x61, 0xbc, 0xdf, 0x21, 0xa4, 0xd3, 0x45, 0xb6, 0x90, 0x7d, 0xda, 0xdf,
 | 
			
		||||
	0xb1, 0x51, 0x2f, 0x64, 0x07, 0x52, 0xd5, 0x78, 0x6f, 0xf8, 0xa3, 0x1b, 0xc4, 0x9f, 0x16, 0x3a,
 | 
			
		||||
	0xa4, 0x43, 0xc4, 0xd2, 0xe6, 0x2b, 0x75, 0x7a, 0x6b, 0xaa, 0x78, 0xd9, 0x41, 0x88, 0xa8, 0xdd,
 | 
			
		||||
	0x23, 0xfd, 0x80, 0x29, 0xbd, 0xcf, 0xcf, 0xa2, 0x87, 0x58, 0x84, 0x3d, 0x75, 0x3b, 0xe3, 0xf6,
 | 
			
		||||
	0x19, 0x34, 0x7d, 0x44, 0xbd, 0x08, 0x87, 0x8c, 0x44, 0x4a, 0xf9, 0x8b, 0x33, 0x28, 0x73, 0xc4,
 | 
			
		||||
	0xc4, 0x3f, 0x4a, 0xb7, 0x31, 0x8c, 0x0d, 0xc3, 0x3d, 0x44, 0x99, 0xdb, 0x0b, 0xa5, 0x80, 0x79,
 | 
			
		||||
	0x98, 0x83, 0xf9, 0xb5, 0x08, 0xb9, 0x0c, 0x3d, 0x72, 0xe9, 0x9e, 0x83, 0x9e, 0xf5, 0x11, 0x65,
 | 
			
		||||
	0x7a, 0x0b, 0x66, 0x12, 0xf3, 0xdb, 0xd8, 0xaf, 0x6b, 0xcb, 0x5a, 0xb3, 0xba, 0x7a, 0x65, 0x70,
 | 
			
		||||
	0xd4, 0xa8, 0xad, 0xc5, 0xe7, 0xed, 0x75, 0xa7, 0x96, 0x08, 0xb5, 0x7d, 0xdd, 0x86, 0x52, 0x44,
 | 
			
		||||
	0x08, 0xdb, 0xa1, 0xf5, 0xfc, 0x72, 0xbe, 0x59, 0x6b, 0xbd, 0x6b, 0xa5, 0x9e, 0x54, 0x44, 0x67,
 | 
			
		||||
	0xdd, 0xe3, 0x60, 0x3a, 0x4a, 0x4c, 0x5f, 0x80, 0x22, 0x65, 0x3e, 0x0e, 0xea, 0x05, 0x6e, 0xdd,
 | 
			
		||||
	0x91, 0x1b, 0x7d, 0x11, 0x4a, 0x94, 0xf9, 0xa4, 0xcf, 0xea, 0x45, 0x71, 0xac, 0x76, 0xea, 0x1c,
 | 
			
		||||
	0x45, 0x51, 0xbd, 0x94, 0x9c, 0xa3, 0x28, 0xd2, 0x0d, 0xa8, 0x30, 0x14, 0xf5, 0x70, 0xe0, 0x76,
 | 
			
		||||
	0xeb, 0xe5, 0x65, 0xad, 0x59, 0x71, 0x92, 0xbd, 0x7e, 0x07, 0xc0, 0xdb, 0x45, 0xde, 0x5e, 0x48,
 | 
			
		||||
	0x70, 0xc0, 0xea, 0x95, 0x65, 0xad, 0x59, 0x6b, 0x5d, 0x1b, 0x0d, 0x6b, 0x3d, 0x41, 0xdc, 0x49,
 | 
			
		||||
	0xc9, 0xeb, 0x16, 0x94, 0x49, 0xc8, 0x30, 0x09, 0x68, 0xbd, 0x2a, 0x54, 0x17, 0x2c, 0x89, 0xa6,
 | 
			
		||||
	0x15, 0xa3, 0x69, 0xdd, 0x0d, 0x0e, 0x9c, 0x58, 0xc8, 0x7c, 0x02, 0x7a, 0x1a, 0x49, 0x1a, 0x92,
 | 
			
		||||
	0x80, 0xa2, 0x37, 0x82, 0x72, 0x0e, 0xf2, 0x21, 0xf6, 0xeb, 0xb9, 0x65, 0xad, 0x39, 0xeb, 0xf0,
 | 
			
		||||
	0xa5, 0xd9, 0x81, 0x99, 0x87, 0xcc, 0x8d, 0xd8, 0x79, 0x1e, 0xe8, 0x43, 0x28, 0xa3, 0x17, 0xc8,
 | 
			
		||||
	0xdb, 0x56, 0x96, 0xab, 0xab, 0x30, 0x38, 0x6a, 0x94, 0x36, 0x5e, 0x20, 0xaf, 0xbd, 0xee, 0x94,
 | 
			
		||||
	0xf8, 0xa7, 0xb6, 0x6f, 0x7e, 0x00, 0xb3, 0xca, 0x91, 0x8a, 0x5f, 0xc5, 0xa2, 0x1d, 0xc7, 0xb2,
 | 
			
		||||
	0x09, 0xf3, 0xeb, 0xa8, 0x8b, 0xce, 0x9d, 0x31, 0xe6, 0xef, 0x1a, 0x5c, 0x96, 0x96, 0x12, 0x6f,
 | 
			
		||||
	0x8b, 0x90, 0x4b, 0x94, 0x4b, 0x83, 0xa3, 0x46, 0xae, 0xbd, 0xee, 0xe4, 0xf0, 0x29, 0x88, 0xe8,
 | 
			
		||||
	0x0d, 0xa8, 0xa1, 0x17, 0x98, 0x6d, 0x53, 0xe6, 0xb2, 0x3e, 0xcf, 0x39, 0xfe, 0x05, 0xf8, 0xd1,
 | 
			
		||||
	0x43, 0x71, 0xa2, 0xdf, 0x85, 0x2a, 0xdf, 0x21, 0x7f, 0xdb, 0x65, 0x22, 0xc5, 0x6a, 0x2d, 0x63,
 | 
			
		||||
	0xe4, 0x01, 0x1f, 0xc5, 0xe5, 0xb0, 0x5a, 0x39, 0x3c, 0x6a, 0x5c, 0x7a, 0xf9, 0x77, 0x43, 0x73,
 | 
			
		||||
	0x2a, 0x52, 0xed, 0x2e, 0x33, 0x09, 0x2c, 0xc8, 0xf8, 0xb6, 0x22, 0xe2, 0x21, 0x4a, 0x2f, 0x1c,
 | 
			
		||||
	0x7d, 0x04, 0xb0, 0x89, 0x2e, 0xfe, 0x91, 0x37, 0xa0, 0x26, 0xdc, 0x28, 0xd0, 0x6f, 0x41, 0x39,
 | 
			
		||||
	0x94, 0x17, 0x14, 0x2e, 0x86, 0x6a, 0x64, 0xff, 0x86, 0x2a, 0x93, 0x18, 0x84, 0x58, 0xd8, 0x5c,
 | 
			
		||||
	0x81, 0xb9, 0x6f, 0x30, 0x65, 0x3c, 0x0d, 0x12, 0x68, 0x16, 0xa1, 0xb4, 0x83, 0xbb, 0x0c, 0x45,
 | 
			
		||||
	0x32, 0x5a, 0x47, 0xed, 0x78, 0xd2, 0xa4, 0x64, 0x93, 0xda, 0x28, 0x8a, 0x16, 0x5f, 0xd7, 0x44,
 | 
			
		||||
	0xc7, 0x98, 0xec, 0x56, 0x8a, 0x9a, 0x2f, 0x35, 0xa8, 0x7d, 0x8d, 0xbb, 0xdd, 0x8b, 0x06, 0x49,
 | 
			
		||||
	0x34, 0x1c, 0xdc, 0xe1, 0x6d, 0x45, 0xe6, 0x96, 0xda, 0xf1, 0x54, 0x74, 0xbb, 0x5d, 0x91, 0x51,
 | 
			
		||||
	0x15, 0x87, 0x2f, 0xcd, 0x7f, 0x35, 0xd0, 0xb9, 0xf2, 0x5b, 0xc8, 0x92, 0xa4, 0x27, 0xe6, 0x4e,
 | 
			
		||||
	0xef, 0x89, 0xf9, 0x31, 0x3d, 0xb1, 0x30, 0xb6, 0x27, 0x16, 0x87, 0x7a, 0x62, 0x13, 0x0a, 0x34,
 | 
			
		||||
	0x44, 0x9e, 0xe8, 0xa2, 0xe3, 0x5a, 0x9a, 0x90, 0x48, 0xa3, 0x54, 0x1e, 0x9b, 0x4a, 0x57, 0xe1,
 | 
			
		||||
	0x9d, 0x13, 0x57, 0x97, 0x2f, 0x6b, 0xfe, 0xa6, 0xc1, 0x9c, 0x83, 0x28, 0xfe, 0x09, 0x6d, 0xb1,
 | 
			
		||||
	0x83, 0x0b, 0x7f, 0xaa, 0x05, 0x28, 0x3e, 0xc7, 0x3e, 0xdb, 0x55, 0x2f, 0x25, 0x37, 0x1c, 0x9d,
 | 
			
		||||
	0x5d, 0x84, 0x3b, 0xbb, 0xb2, 0xfa, 0x67, 0x1d, 0xb5, 0x33, 0x7f, 0x81, 0xcb, 0x6b, 0x5d, 0x42,
 | 
			
		||||
	0x51, 0xfb, 0xfe, 0xff, 0x11, 0x98, 0x7c, 0xce, 0xbc, 0x78, 0x05, 0xb9, 0x31, 0xbf, 0x82, 0xb9,
 | 
			
		||||
	0x2d, 0xb7, 0x4f, 0xcf, 0xdd, 0x3f, 0x37, 0x61, 0xde, 0x41, 0xb4, 0xdf, 0x3b, 0xb7, 0xa1, 0x0d,
 | 
			
		||||
	0xb8, 0xc2, 0x8b, 0x73, 0x0b, 0xfb, 0xe7, 0x49, 0x5e, 0xd3, 0x91, 0xfd, 0x40, 0x9a, 0x51, 0x25,
 | 
			
		||||
	0xfe, 0x25, 0x54, 0x55, 0xbb, 0x40, 0x71, 0x99, 0x2f, 0x4f, 0x2a, 0xf3, 0x76, 0xb0, 0x43, 0x9c,
 | 
			
		||||
	0x63, 0x15, 0xf3, 0x95, 0x06, 0x57, 0xd7, 0x92, 0x99, 0x7c, 0x5e, 0x8e, 0xb2, 0x0d, 0xf3, 0xa1,
 | 
			
		||||
	0x1b, 0xa1, 0x80, 0x6d, 0xa7, 0x78, 0x81, 0x7c, 0xbe, 0x16, 0xef, 0xff, 0x7f, 0x1d, 0x35, 0x56,
 | 
			
		||||
	0x52, 0x6c, 0x8b, 0x84, 0x28, 0x48, 0xd4, 0xa9, 0xdd, 0x21, 0xd7, 0x7d, 0xdc, 0x41, 0x94, 0x59,
 | 
			
		||||
	0xeb, 0xe2, 0x3f, 0x67, 0x4e, 0x1a, 0x5b, 0x3b, 0x95, 0x33, 0xe4, 0xa7, 0xe1, 0x0c, 0x8f, 0x61,
 | 
			
		||||
	0x71, 0xf8, 0x76, 0x09, 0x70, 0xb5, 0x63, 0x26, 0x78, 0x6a, 0x87, 0x1c, 0x21, 0x2f, 0x69, 0x05,
 | 
			
		||||
	0xf3, 0x67, 0x98, 0xff, 0x36, 0xf4, 0xdf, 0x02, 0xaf, 0x6b, 0x41, 0x35, 0x42, 0x94, 0xf4, 0x23,
 | 
			
		||||
	0x0f, 0x51, 0x81, 0xd5, 0xb8, 0x4b, 0x1d, 0x8b, 0x99, 0x2b, 0x70, 0xf9, 0x9e, 0x24, 0xc0, 0xb1,
 | 
			
		||||
	0xe7, 0x3a, 0x94, 0xe5, 0x24, 0x90, 0x57, 0xa9, 0x3a, 0xf1, 0x96, 0x27, 0x5f, 0x22, 0x9b, 0xcc,
 | 
			
		||||
	0x85, 0xb2, 0xe2, 0xcf, 0xea, 0xde, 0xf5, 0x53, 0xb8, 0xa4, 0x10, 0x70, 0x62, 0x41, 0x73, 0x07,
 | 
			
		||||
	0x6a, 0xdf, 0xbb, 0xf8, 0xe2, 0x67, 0x67, 0x04, 0x33, 0xd2, 0x8f, 0x8a, 0x75, 0x88, 0x87, 0x68,
 | 
			
		||||
	0x93, 0x79, 0x48, 0xee, 0x4d, 0x78, 0x48, 0xeb, 0xd5, 0x0c, 0x14, 0xc5, 0xe4, 0xd4, 0xf7, 0xa0,
 | 
			
		||||
	0x24, 0x39, 0xa6, 0x6e, 0x5b, 0x93, 0x7e, 0x31, 0x59, 0x23, 0x9c, 0xde, 0xf8, 0x74, 0x7a, 0x05,
 | 
			
		||||
	0x75, 0xb5, 0x1f, 0xa1, 0x28, 0xb8, 0xa0, 0xbe, 0x32, 0x59, 0x35, 0xcd, 0x4c, 0x8d, 0x8f, 0xa7,
 | 
			
		||||
	0x92, 0x55, 0x1e, 0x3a, 0x50, 0x92, 0x04, 0x2b, 0xeb, 0x3a, 0x23, 0x84, 0xd3, 0xf8, 0x64, 0x1a,
 | 
			
		||||
	0x85, 0xc4, 0xd1, 0x33, 0x98, 0x3d, 0xc1, 0xe4, 0xf4, 0xd6, 0x34, 0xea, 0x27, 0x07, 0xfa, 0x19,
 | 
			
		||||
	0x5d, 0x3e, 0x81, 0xfc, 0x26, 0x62, 0x7a, 0x73, 0xb2, 0xd2, 0x31, 0xdd, 0x33, 0x3e, 0x9a, 0x42,
 | 
			
		||||
	0x32, 0xc1, 0xad, 0xc0, 0x3b, 0xad, 0x6e, 0x4d, 0x56, 0x19, 0x66, 0x67, 0x86, 0x3d, 0xb5, 0xbc,
 | 
			
		||||
	0x72, 0xd4, 0x86, 0x02, 0x27, 0x5b, 0x7a, 0x46, 0x6c, 0x29, 0x42, 0x66, 0x2c, 0x8e, 0x24, 0xf7,
 | 
			
		||||
	0x06, 0xff, 0xb1, 0xae, 0x6f, 0x41, 0x81, 0x97, 0x92, 0x9e, 0x91, 0x87, 0xa3, 0x44, 0x6a, 0xac,
 | 
			
		||||
	0xc5, 0x87, 0x50, 0x4d, 0x38, 0x46, 0x16, 0x14, 0xc3, 0x64, 0x64, 0xac, 0xd1, 0xfb, 0x50, 0x56,
 | 
			
		||||
	0xec, 0x40, 0xcf, 0x78, 0xef, 0x93, 0x24, 0x62, 0x82, 0xc1, 0xa2, 0x98, 0xf6, 0x59, 0x11, 0x0e,
 | 
			
		||||
	0x53, 0x82, 0xb1, 0x06, 0x1f, 0x40, 0x49, 0x8e, 0xfd, 0xac, 0xa2, 0x19, 0x21, 0x07, 0x63, 0x4d,
 | 
			
		||||
	0x62, 0xa8, 0xc4, 0x93, 0x5b, 0xbf, 0x9e, 0x9d, 0x23, 0x29, 0xa2, 0x60, 0x58, 0xd3, 0x8a, 0xab,
 | 
			
		||||
	0x8c, 0x7a, 0x0e, 0x90, 0x9a, 0x97, 0x37, 0x33, 0x20, 0x3e, 0x6d, 0xf2, 0x1b, 0x9f, 0x9d, 0x4d,
 | 
			
		||||
	0x49, 0x39, 0x7e, 0x00, 0x25, 0x39, 0x10, 0xb3, 0x60, 0x1b, 0x19, 0x9b, 0x63, 0x61, 0xdb, 0x81,
 | 
			
		||||
	0xb2, 0x1a, 0x5d, 0x59, 0xb9, 0x72, 0x72, 0x1a, 0x1a, 0xd7, 0xa7, 0x94, 0x56, 0xa1, 0xff, 0x00,
 | 
			
		||||
	0x05, 0x3e, 0x73, 0xb2, 0xaa, 0x30, 0x35, 0xff, 0x8c, 0x95, 0x69, 0x44, 0xa5, 0xf9, 0xd5, 0xef,
 | 
			
		||||
	0x0e, 0x5f, 0x2f, 0x5d, 0xfa, 0xf3, 0xf5, 0xd2, 0xa5, 0x5f, 0x07, 0x4b, 0xda, 0xe1, 0x60, 0x49,
 | 
			
		||||
	0xfb, 0x63, 0xb0, 0xa4, 0xfd, 0x33, 0x58, 0xd2, 0x9e, 0xdc, 0x79, 0xb3, 0xbf, 0xec, 0xdd, 0x16,
 | 
			
		||||
	0x8b, 0xc7, 0xb9, 0xa7, 0x25, 0x01, 0xd8, 0xcd, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x85, 0xa2,
 | 
			
		||||
	0x4f, 0xd1, 0x22, 0x14, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/tasks/v1/tasks.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/tasks/v1/tasks.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -4,7 +4,7 @@ package containerd.services.tasks.v1;
 | 
			
		||||
 | 
			
		||||
import "google/protobuf/empty.proto";
 | 
			
		||||
import "google/protobuf/any.proto";
 | 
			
		||||
import "gogoproto/gogo.proto";
 | 
			
		||||
import weak "gogoproto/gogo.proto";
 | 
			
		||||
import "github.com/containerd/containerd/api/types/mount.proto";
 | 
			
		||||
import "github.com/containerd/containerd/api/types/metrics.proto";
 | 
			
		||||
import "github.com/containerd/containerd/api/types/descriptor.proto";
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								vendor/github.com/containerd/containerd/api/services/version/v1/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/containerd/containerd/api/services/version/v1/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -12,9 +12,8 @@ go_library(
 | 
			
		||||
    importpath = "github.com/containerd/containerd/api/services/version/v1",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/proto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/empty:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/types:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/net/context:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/grpc:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								vendor/github.com/containerd/containerd/api/services/version/v1/version.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										34
									
								
								vendor/github.com/containerd/containerd/api/services/version/v1/version.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
// Code generated by protoc-gen-gogo.
 | 
			
		||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
 | 
			
		||||
// source: github.com/containerd/containerd/api/services/version/v1/version.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	Package version is a generated protocol buffer package.
 | 
			
		||||
@@ -16,8 +15,9 @@ package version
 | 
			
		||||
import proto "github.com/gogo/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
import google_protobuf "github.com/golang/protobuf/ptypes/empty"
 | 
			
		||||
import _ "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
import google_protobuf "github.com/gogo/protobuf/types"
 | 
			
		||||
 | 
			
		||||
// skipping weak import gogoproto "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	context "golang.org/x/net/context"
 | 
			
		||||
@@ -155,24 +155,6 @@ func (m *VersionResponse) MarshalTo(dAtA []byte) (int, error) {
 | 
			
		||||
	return i, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func encodeFixed64Version(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	dAtA[offset+4] = uint8(v >> 32)
 | 
			
		||||
	dAtA[offset+5] = uint8(v >> 40)
 | 
			
		||||
	dAtA[offset+6] = uint8(v >> 48)
 | 
			
		||||
	dAtA[offset+7] = uint8(v >> 56)
 | 
			
		||||
	return offset + 8
 | 
			
		||||
}
 | 
			
		||||
func encodeFixed32Version(dAtA []byte, offset int, v uint32) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	return offset + 4
 | 
			
		||||
}
 | 
			
		||||
func encodeVarintVersion(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	for v >= 1<<7 {
 | 
			
		||||
		dAtA[offset] = uint8(v&0x7f | 0x80)
 | 
			
		||||
@@ -446,7 +428,7 @@ func init() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var fileDescriptorVersion = []byte{
 | 
			
		||||
	// 241 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	// 243 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x72, 0x4b, 0xcf, 0x2c, 0xc9,
 | 
			
		||||
	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xcc, 0xcc, 0x4b, 0x2d,
 | 
			
		||||
	0x4a, 0x41, 0x66, 0x26, 0x16, 0x64, 0xea, 0x17, 0xa7, 0x16, 0x95, 0x65, 0x26, 0xa7, 0x16, 0xeb,
 | 
			
		||||
@@ -460,7 +442,7 @@ var fileDescriptorVersion = []byte{
 | 
			
		||||
	0x76, 0xa8, 0x41, 0x42, 0x41, 0x08, 0xa6, 0x98, 0x1e, 0xc4, 0x49, 0x7a, 0x30, 0x27, 0xe9, 0xb9,
 | 
			
		||||
	0x82, 0x9c, 0x24, 0xa5, 0xaf, 0x87, 0xdf, 0x2b, 0x7a, 0x68, 0x8e, 0x72, 0x8a, 0x3a, 0xf1, 0x50,
 | 
			
		||||
	0x8e, 0xe1, 0xc6, 0x43, 0x39, 0x86, 0x86, 0x47, 0x72, 0x8c, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78,
 | 
			
		||||
	0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0x63, 0x94, 0x03, 0xb9, 0x81, 0x6b, 0x0d, 0x65, 0x26, 0xb1,
 | 
			
		||||
	0x81, 0x1d, 0x67, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0xb6, 0x37, 0xd8, 0xc6, 0xa7, 0x01, 0x00,
 | 
			
		||||
	0x00,
 | 
			
		||||
	0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0x63, 0x94, 0x03, 0xb9, 0x81, 0x6b, 0x0d, 0x65, 0x46, 0x30,
 | 
			
		||||
	0x26, 0xb1, 0x81, 0x9d, 0x67, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x95, 0x0d, 0x52, 0x23, 0xa9,
 | 
			
		||||
	0x01, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/version/v1/version.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/services/version/v1/version.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -3,7 +3,7 @@ syntax = "proto3";
 | 
			
		||||
package containerd.services.version.v1;
 | 
			
		||||
 | 
			
		||||
import "google/protobuf/empty.proto";
 | 
			
		||||
import "gogoproto/gogo.proto";
 | 
			
		||||
import weak "gogoproto/gogo.proto";
 | 
			
		||||
 | 
			
		||||
// TODO(stevvooe): Should version service actually be versioned?
 | 
			
		||||
option go_package = "github.com/containerd/containerd/api/services/version/v1;version";
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/containerd/api/types/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/containerd/api/types/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -23,7 +23,6 @@ go_library(
 | 
			
		||||
    importpath = "github.com/containerd/containerd/api/types",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/proto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/types:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/go-digest:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/github.com/containerd/containerd/api/types/descriptor.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								vendor/github.com/containerd/containerd/api/types/descriptor.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
// Code generated by protoc-gen-gogo.
 | 
			
		||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
 | 
			
		||||
// source: github.com/containerd/containerd/api/types/descriptor.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	Package types is a generated protocol buffer package.
 | 
			
		||||
@@ -22,7 +21,8 @@ package types
 | 
			
		||||
import proto "github.com/gogo/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
import _ "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
// skipping weak import gogoproto "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
import github_com_opencontainers_go_digest "github.com/opencontainers/go-digest"
 | 
			
		||||
 | 
			
		||||
@@ -95,24 +95,6 @@ func (m *Descriptor) MarshalTo(dAtA []byte) (int, error) {
 | 
			
		||||
	return i, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func encodeFixed64Descriptor(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	dAtA[offset+4] = uint8(v >> 32)
 | 
			
		||||
	dAtA[offset+5] = uint8(v >> 40)
 | 
			
		||||
	dAtA[offset+6] = uint8(v >> 48)
 | 
			
		||||
	dAtA[offset+7] = uint8(v >> 56)
 | 
			
		||||
	return offset + 8
 | 
			
		||||
}
 | 
			
		||||
func encodeFixed32Descriptor(dAtA []byte, offset int, v uint32) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	return offset + 4
 | 
			
		||||
}
 | 
			
		||||
func encodeVarintDescriptor(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	for v >= 1<<7 {
 | 
			
		||||
		dAtA[offset] = uint8(v&0x7f | 0x80)
 | 
			
		||||
@@ -409,7 +391,7 @@ func init() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var fileDescriptorDescriptor = []byte{
 | 
			
		||||
	// 232 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	// 234 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4e, 0xcf, 0x2c, 0xc9,
 | 
			
		||||
	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xcc, 0xcc, 0x4b, 0x2d,
 | 
			
		||||
	0x4a, 0x41, 0x66, 0x26, 0x16, 0x64, 0xea, 0x97, 0x54, 0x16, 0xa4, 0x16, 0xeb, 0xa7, 0xa4, 0x16,
 | 
			
		||||
@@ -423,6 +405,6 @@ var fileDescriptorDescriptor = []byte{
 | 
			
		||||
	0x4d, 0x10, 0x12, 0xe2, 0x62, 0x29, 0xce, 0xac, 0x4a, 0x95, 0x60, 0x56, 0x60, 0xd4, 0x60, 0x0e,
 | 
			
		||||
	0x02, 0xb3, 0x9d, 0xbc, 0x4e, 0x3c, 0x94, 0x63, 0xb8, 0xf1, 0x50, 0x8e, 0xa1, 0xe1, 0x91, 0x1c,
 | 
			
		||||
	0xe3, 0x89, 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x18, 0x65, 0x40,
 | 
			
		||||
	0x7c, 0x60, 0x58, 0x83, 0xc9, 0x24, 0x36, 0xb0, 0x07, 0x8d, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff,
 | 
			
		||||
	0x23, 0x14, 0xc9, 0x7c, 0x47, 0x01, 0x00, 0x00,
 | 
			
		||||
	0x7c, 0x60, 0x58, 0x83, 0xc9, 0x08, 0x86, 0x24, 0x36, 0xb0, 0x17, 0x8d, 0x01, 0x01, 0x00, 0x00,
 | 
			
		||||
	0xff, 0xff, 0xea, 0xac, 0x78, 0x9a, 0x49, 0x01, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/descriptor.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/descriptor.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@ syntax = "proto3";
 | 
			
		||||
 | 
			
		||||
package containerd.types;
 | 
			
		||||
 | 
			
		||||
import "gogoproto/gogo.proto";
 | 
			
		||||
import weak "gogoproto/gogo.proto";
 | 
			
		||||
 | 
			
		||||
option go_package = "github.com/containerd/containerd/api/types;types";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										31
									
								
								vendor/github.com/containerd/containerd/api/types/metrics.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								vendor/github.com/containerd/containerd/api/types/metrics.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,13 +1,13 @@
 | 
			
		||||
// Code generated by protoc-gen-gogo.
 | 
			
		||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
 | 
			
		||||
// source: github.com/containerd/containerd/api/types/metrics.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package types
 | 
			
		||||
 | 
			
		||||
import proto "github.com/gogo/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
import _ "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
// skipping weak import gogoproto "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
import google_protobuf1 "github.com/gogo/protobuf/types"
 | 
			
		||||
import _ "github.com/gogo/protobuf/types"
 | 
			
		||||
 | 
			
		||||
@@ -81,24 +81,6 @@ func (m *Metric) MarshalTo(dAtA []byte) (int, error) {
 | 
			
		||||
	return i, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func encodeFixed64Metrics(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	dAtA[offset+4] = uint8(v >> 32)
 | 
			
		||||
	dAtA[offset+5] = uint8(v >> 40)
 | 
			
		||||
	dAtA[offset+6] = uint8(v >> 48)
 | 
			
		||||
	dAtA[offset+7] = uint8(v >> 56)
 | 
			
		||||
	return offset + 8
 | 
			
		||||
}
 | 
			
		||||
func encodeFixed32Metrics(dAtA []byte, offset int, v uint32) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	return offset + 4
 | 
			
		||||
}
 | 
			
		||||
func encodeVarintMetrics(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	for v >= 1<<7 {
 | 
			
		||||
		dAtA[offset] = uint8(v&0x7f | 0x80)
 | 
			
		||||
@@ -409,7 +391,7 @@ func init() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var fileDescriptorMetrics = []byte{
 | 
			
		||||
	// 256 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	// 258 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x48, 0xcf, 0x2c, 0xc9,
 | 
			
		||||
	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xcc, 0xcc, 0x4b, 0x2d,
 | 
			
		||||
	0x4a, 0x41, 0x66, 0x26, 0x16, 0x64, 0xea, 0x97, 0x54, 0x16, 0xa4, 0x16, 0xeb, 0xe7, 0xa6, 0x96,
 | 
			
		||||
@@ -424,6 +406,7 @@ var fileDescriptorMetrics = []byte{
 | 
			
		||||
	0x5d, 0x82, 0x98, 0x32, 0x53, 0x84, 0x34, 0xb8, 0x58, 0x52, 0x12, 0x4b, 0x12, 0x25, 0x98, 0xc1,
 | 
			
		||||
	0xc6, 0x8a, 0x60, 0x18, 0xeb, 0x98, 0x57, 0x19, 0x04, 0x56, 0xe1, 0xe4, 0x75, 0xe2, 0xa1, 0x1c,
 | 
			
		||||
	0xc3, 0x8d, 0x87, 0x72, 0x0c, 0x0d, 0x8f, 0xe4, 0x18, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48,
 | 
			
		||||
	0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x28, 0x03, 0xe2, 0x03, 0xd2, 0x1a, 0x4c, 0x26, 0xb1, 0x81,
 | 
			
		||||
	0xcd, 0x37, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x51, 0x36, 0x74, 0x83, 0x01, 0x00, 0x00,
 | 
			
		||||
	0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x28, 0x03, 0xe2, 0x03, 0xd2, 0x1a, 0x4c, 0x46, 0x30, 0x24,
 | 
			
		||||
	0xb1, 0x81, 0x6d, 0x30, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xde, 0x0d, 0x02, 0xfe, 0x85, 0x01,
 | 
			
		||||
	0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/metrics.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/metrics.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@ syntax = "proto3";
 | 
			
		||||
 | 
			
		||||
package containerd.types;
 | 
			
		||||
 | 
			
		||||
import "gogoproto/gogo.proto";
 | 
			
		||||
import weak "gogoproto/gogo.proto";
 | 
			
		||||
import "google/protobuf/any.proto";
 | 
			
		||||
import "google/protobuf/timestamp.proto";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/github.com/containerd/containerd/api/types/mount.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								vendor/github.com/containerd/containerd/api/types/mount.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,13 +1,13 @@
 | 
			
		||||
// Code generated by protoc-gen-gogo.
 | 
			
		||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
 | 
			
		||||
// source: github.com/containerd/containerd/api/types/mount.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package types
 | 
			
		||||
 | 
			
		||||
import proto "github.com/gogo/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
import _ "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
// skipping weak import gogoproto "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
import strings "strings"
 | 
			
		||||
import reflect "reflect"
 | 
			
		||||
@@ -96,24 +96,6 @@ func (m *Mount) MarshalTo(dAtA []byte) (int, error) {
 | 
			
		||||
	return i, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func encodeFixed64Mount(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	dAtA[offset+4] = uint8(v >> 32)
 | 
			
		||||
	dAtA[offset+5] = uint8(v >> 40)
 | 
			
		||||
	dAtA[offset+6] = uint8(v >> 48)
 | 
			
		||||
	dAtA[offset+7] = uint8(v >> 56)
 | 
			
		||||
	return offset + 8
 | 
			
		||||
}
 | 
			
		||||
func encodeFixed32Mount(dAtA []byte, offset int, v uint32) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	return offset + 4
 | 
			
		||||
}
 | 
			
		||||
func encodeVarintMount(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	for v >= 1<<7 {
 | 
			
		||||
		dAtA[offset] = uint8(v&0x7f | 0x80)
 | 
			
		||||
@@ -457,7 +439,7 @@ func init() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var fileDescriptorMount = []byte{
 | 
			
		||||
	// 200 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	// 202 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x32, 0x4b, 0xcf, 0x2c, 0xc9,
 | 
			
		||||
	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xcc, 0xcc, 0x4b, 0x2d,
 | 
			
		||||
	0x4a, 0x41, 0x66, 0x26, 0x16, 0x64, 0xea, 0x97, 0x54, 0x16, 0xa4, 0x16, 0xeb, 0xe7, 0xe6, 0x97,
 | 
			
		||||
@@ -469,6 +451,6 @@ var fileDescriptorMount = []byte{
 | 
			
		||||
	0x82, 0x8b, 0x3d, 0xbf, 0xa0, 0x24, 0x33, 0x3f, 0xaf, 0x58, 0x82, 0x45, 0x81, 0x59, 0x83, 0x33,
 | 
			
		||||
	0x08, 0xc6, 0x75, 0xf2, 0x3a, 0xf1, 0x50, 0x8e, 0xe1, 0xc6, 0x43, 0x39, 0x86, 0x86, 0x47, 0x72,
 | 
			
		||||
	0x8c, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0x63, 0x94, 0x01,
 | 
			
		||||
	0xf1, 0x1e, 0xb4, 0x06, 0x93, 0x49, 0x6c, 0x60, 0x97, 0x1b, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff,
 | 
			
		||||
	0xe5, 0xc7, 0x07, 0x3f, 0x1b, 0x01, 0x00, 0x00,
 | 
			
		||||
	0xf1, 0x1e, 0xb4, 0x06, 0x93, 0x11, 0x0c, 0x49, 0x6c, 0x60, 0xb7, 0x1b, 0x03, 0x02, 0x00, 0x00,
 | 
			
		||||
	0xff, 0xff, 0x82, 0x1c, 0x02, 0x18, 0x1d, 0x01, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/mount.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/mount.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@ syntax = "proto3";
 | 
			
		||||
 | 
			
		||||
package containerd.types;
 | 
			
		||||
 | 
			
		||||
import "gogoproto/gogo.proto";
 | 
			
		||||
import weak "gogoproto/gogo.proto";
 | 
			
		||||
 | 
			
		||||
option go_package = "github.com/containerd/containerd/api/types;types";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								vendor/github.com/containerd/containerd/api/types/platform.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								vendor/github.com/containerd/containerd/api/types/platform.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,13 +1,13 @@
 | 
			
		||||
// Code generated by protoc-gen-gogo.
 | 
			
		||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
 | 
			
		||||
// source: github.com/containerd/containerd/api/types/platform.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
package types
 | 
			
		||||
 | 
			
		||||
import proto "github.com/gogo/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
import _ "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
// skipping weak import gogoproto "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
import strings "strings"
 | 
			
		||||
import reflect "reflect"
 | 
			
		||||
@@ -70,24 +70,6 @@ func (m *Platform) MarshalTo(dAtA []byte) (int, error) {
 | 
			
		||||
	return i, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func encodeFixed64Platform(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	dAtA[offset+4] = uint8(v >> 32)
 | 
			
		||||
	dAtA[offset+5] = uint8(v >> 40)
 | 
			
		||||
	dAtA[offset+6] = uint8(v >> 48)
 | 
			
		||||
	dAtA[offset+7] = uint8(v >> 56)
 | 
			
		||||
	return offset + 8
 | 
			
		||||
}
 | 
			
		||||
func encodeFixed32Platform(dAtA []byte, offset int, v uint32) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	return offset + 4
 | 
			
		||||
}
 | 
			
		||||
func encodeVarintPlatform(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	for v >= 1<<7 {
 | 
			
		||||
		dAtA[offset] = uint8(v&0x7f | 0x80)
 | 
			
		||||
@@ -395,7 +377,7 @@ func init() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var fileDescriptorPlatform = []byte{
 | 
			
		||||
	// 203 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	// 205 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0x4c, 0xcf, 0x2c, 0xc9,
 | 
			
		||||
	0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xcc, 0xcc, 0x4b, 0x2d,
 | 
			
		||||
	0x4a, 0x41, 0x66, 0x26, 0x16, 0x64, 0xea, 0x97, 0x54, 0x16, 0xa4, 0x16, 0xeb, 0x17, 0xe4, 0x24,
 | 
			
		||||
@@ -407,6 +389,6 @@ var fileDescriptorPlatform = []byte{
 | 
			
		||||
	0x40, 0x2a, 0x82, 0x50, 0xc4, 0x84, 0x24, 0xb8, 0xd8, 0xcb, 0x12, 0x8b, 0x32, 0x13, 0xf3, 0x4a,
 | 
			
		||||
	0x24, 0x98, 0xc1, 0xd2, 0x30, 0xae, 0x93, 0xd7, 0x89, 0x87, 0x72, 0x0c, 0x37, 0x1e, 0xca, 0x31,
 | 
			
		||||
	0x34, 0x3c, 0x92, 0x63, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4,
 | 
			
		||||
	0x18, 0xa3, 0x0c, 0x88, 0xf7, 0x9e, 0x35, 0x98, 0x4c, 0x62, 0x03, 0x3b, 0xda, 0x18, 0x10, 0x00,
 | 
			
		||||
	0x00, 0xff, 0xff, 0x97, 0xa1, 0x99, 0x56, 0x19, 0x01, 0x00, 0x00,
 | 
			
		||||
	0x18, 0xa3, 0x0c, 0x88, 0xf7, 0x9e, 0x35, 0x98, 0x8c, 0x60, 0x48, 0x62, 0x03, 0x3b, 0xdb, 0x18,
 | 
			
		||||
	0x10, 0x00, 0x00, 0xff, 0xff, 0x05, 0xaa, 0xda, 0xa1, 0x1b, 0x01, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/platform.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/platform.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@ syntax = "proto3";
 | 
			
		||||
 | 
			
		||||
package containerd.types;
 | 
			
		||||
 | 
			
		||||
import "gogoproto/gogo.proto";
 | 
			
		||||
import weak "gogoproto/gogo.proto";
 | 
			
		||||
 | 
			
		||||
option go_package = "github.com/containerd/containerd/api/types;types";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/containerd/api/types/task/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/containerd/api/types/task/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -6,7 +6,6 @@ go_library(
 | 
			
		||||
    importpath = "github.com/containerd/containerd/api/types/task",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/proto:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/types:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										95
									
								
								vendor/github.com/containerd/containerd/api/types/task/task.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										95
									
								
								vendor/github.com/containerd/containerd/api/types/task/task.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,6 +1,5 @@
 | 
			
		||||
// Code generated by protoc-gen-gogo.
 | 
			
		||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
 | 
			
		||||
// source: github.com/containerd/containerd/api/types/task/task.proto
 | 
			
		||||
// DO NOT EDIT!
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
	Package task is a generated protocol buffer package.
 | 
			
		||||
@@ -17,7 +16,8 @@ package task
 | 
			
		||||
import proto "github.com/gogo/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
import _ "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
 | 
			
		||||
// skipping weak import gogoproto "github.com/gogo/protobuf/gogoproto"
 | 
			
		||||
import _ "github.com/gogo/protobuf/types"
 | 
			
		||||
import google_protobuf2 "github.com/gogo/protobuf/types"
 | 
			
		||||
 | 
			
		||||
@@ -224,24 +224,6 @@ func (m *ProcessInfo) MarshalTo(dAtA []byte) (int, error) {
 | 
			
		||||
	return i, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func encodeFixed64Task(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	dAtA[offset+4] = uint8(v >> 32)
 | 
			
		||||
	dAtA[offset+5] = uint8(v >> 40)
 | 
			
		||||
	dAtA[offset+6] = uint8(v >> 48)
 | 
			
		||||
	dAtA[offset+7] = uint8(v >> 56)
 | 
			
		||||
	return offset + 8
 | 
			
		||||
}
 | 
			
		||||
func encodeFixed32Task(dAtA []byte, offset int, v uint32) int {
 | 
			
		||||
	dAtA[offset] = uint8(v)
 | 
			
		||||
	dAtA[offset+1] = uint8(v >> 8)
 | 
			
		||||
	dAtA[offset+2] = uint8(v >> 16)
 | 
			
		||||
	dAtA[offset+3] = uint8(v >> 24)
 | 
			
		||||
	return offset + 4
 | 
			
		||||
}
 | 
			
		||||
func encodeVarintTask(dAtA []byte, offset int, v uint64) int {
 | 
			
		||||
	for v >= 1<<7 {
 | 
			
		||||
		dAtA[offset] = uint8(v&0x7f | 0x80)
 | 
			
		||||
@@ -869,39 +851,40 @@ func init() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var fileDescriptorTask = []byte{
 | 
			
		||||
	// 543 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xcf, 0x6e, 0xd3, 0x4c,
 | 
			
		||||
	0x14, 0xc5, 0x33, 0x6e, 0xe3, 0x24, 0xe3, 0xb6, 0x9f, 0x3f, 0x13, 0x55, 0xc6, 0x20, 0xdb, 0xea,
 | 
			
		||||
	0xca, 0x62, 0x61, 0x8b, 0x74, 0xc7, 0x2e, 0xff, 0x84, 0x2c, 0x24, 0x37, 0x72, 0x12, 0xb1, 0x8c,
 | 
			
		||||
	0x9c, 0x78, 0x62, 0x46, 0x6d, 0x66, 0x2c, 0x7b, 0x0c, 0x64, 0xc7, 0x12, 0x75, 0xc5, 0x0b, 0x74,
 | 
			
		||||
	0x05, 0x4f, 0xc1, 0x13, 0x64, 0xc9, 0x0a, 0xb1, 0x0a, 0xd4, 0x4f, 0x82, 0xc6, 0x76, 0xd2, 0x08,
 | 
			
		||||
	0xd8, 0x8c, 0xee, 0x3d, 0xbf, 0x33, 0x77, 0xee, 0x1c, 0xf8, 0x22, 0xc2, 0xec, 0x4d, 0x36, 0xb7,
 | 
			
		||||
	0x17, 0x74, 0xe5, 0x2c, 0x28, 0x61, 0x01, 0x26, 0x28, 0x09, 0x0f, 0xcb, 0x20, 0xc6, 0x0e, 0x5b,
 | 
			
		||||
	0xc7, 0x28, 0x75, 0x58, 0x90, 0x5e, 0x17, 0x87, 0x1d, 0x27, 0x94, 0x51, 0xe5, 0xd1, 0x83, 0xcb,
 | 
			
		||||
	0x7e, 0xfb, 0xdc, 0x2e, 0x4c, 0x5a, 0x3b, 0xa2, 0x11, 0x2d, 0xb8, 0xc3, 0xab, 0xd2, 0xaa, 0x19,
 | 
			
		||||
	0x11, 0xa5, 0xd1, 0x0d, 0x72, 0x8a, 0x6e, 0x9e, 0x2d, 0x1d, 0x86, 0x57, 0x28, 0x65, 0xc1, 0x2a,
 | 
			
		||||
	0xae, 0x0c, 0x8f, 0xff, 0x34, 0x04, 0x64, 0x5d, 0xa2, 0x8b, 0x5c, 0x80, 0x8d, 0x51, 0x42, 0x17,
 | 
			
		||||
	0x28, 0x4d, 0x95, 0x0e, 0x3c, 0xd9, 0x3f, 0x3a, 0xc3, 0xa1, 0x0a, 0x4c, 0x60, 0xb5, 0x7a, 0xff,
 | 
			
		||||
	0xe5, 0x5b, 0x43, 0xea, 0xef, 0x74, 0x77, 0xe0, 0x4b, 0x7b, 0x93, 0x1b, 0x2a, 0xe7, 0x50, 0xc0,
 | 
			
		||||
	0xa1, 0x2a, 0x14, 0x4e, 0x31, 0xdf, 0x1a, 0x82, 0x3b, 0xf0, 0x05, 0x1c, 0x2a, 0x32, 0x3c, 0x8a,
 | 
			
		||||
	0x71, 0xa8, 0x1e, 0x99, 0xc0, 0x3a, 0xf5, 0x79, 0xa9, 0x5c, 0x42, 0x31, 0x65, 0x01, 0xcb, 0x52,
 | 
			
		||||
	0xf5, 0xd8, 0x04, 0xd6, 0x59, 0xe7, 0x89, 0xfd, 0x8f, 0x1f, 0xda, 0xe3, 0xc2, 0xe2, 0x57, 0x56,
 | 
			
		||||
	0xa5, 0x0d, 0xeb, 0x29, 0x0b, 0x31, 0x51, 0xeb, 0xfc, 0x05, 0xbf, 0x6c, 0x94, 0x73, 0x3e, 0x2a,
 | 
			
		||||
	0xa4, 0x19, 0x53, 0xc5, 0x42, 0xae, 0xba, 0x4a, 0x47, 0x49, 0xa2, 0x36, 0xf6, 0x3a, 0x4a, 0x12,
 | 
			
		||||
	0x45, 0x83, 0x4d, 0x86, 0x92, 0x15, 0x26, 0xc1, 0x8d, 0xda, 0x34, 0x81, 0xd5, 0xf4, 0xf7, 0xbd,
 | 
			
		||||
	0x62, 0x40, 0x09, 0xbd, 0xc7, 0x6c, 0x56, 0xed, 0xd6, 0x2a, 0x16, 0x86, 0x5c, 0x2a, 0x57, 0x51,
 | 
			
		||||
	0xba, 0xb0, 0xc5, 0x3b, 0x14, 0xce, 0x02, 0xa6, 0x42, 0x13, 0x58, 0x52, 0x47, 0xb3, 0xcb, 0x40,
 | 
			
		||||
	0xed, 0x5d, 0xa0, 0xf6, 0x64, 0x97, 0x78, 0xaf, 0xb9, 0xd9, 0x1a, 0xb5, 0x4f, 0x3f, 0x0d, 0xe0,
 | 
			
		||||
	0x37, 0xcb, 0x6b, 0x5d, 0x76, 0xe1, 0x42, 0xa9, 0xca, 0xd8, 0x25, 0x4b, 0xba, 0xcb, 0x06, 0x3c,
 | 
			
		||||
	0x64, 0x63, 0xc1, 0x63, 0x4c, 0x96, 0xb4, 0xc8, 0x51, 0xea, 0xb4, 0xff, 0x1a, 0xdf, 0x25, 0x6b,
 | 
			
		||||
	0xbf, 0x70, 0x3c, 0xfb, 0x0e, 0xa0, 0x58, 0x2d, 0xa6, 0xc3, 0xc6, 0xd4, 0x7b, 0xe5, 0x5d, 0xbd,
 | 
			
		||||
	0xf6, 0xe4, 0x9a, 0xf6, 0xff, 0xed, 0x9d, 0x79, 0x5a, 0x82, 0x29, 0xb9, 0x26, 0xf4, 0x1d, 0xe1,
 | 
			
		||||
	0xbc, 0xef, 0x0f, 0xbb, 0x93, 0xe1, 0x40, 0x06, 0x87, 0xbc, 0x9f, 0xa0, 0x80, 0xa1, 0x90, 0x73,
 | 
			
		||||
	0x7f, 0xea, 0x79, 0xae, 0xf7, 0x52, 0x16, 0x0e, 0xb9, 0x9f, 0x11, 0x82, 0x49, 0xc4, 0xf9, 0x78,
 | 
			
		||||
	0x72, 0x35, 0x1a, 0x0d, 0x07, 0xf2, 0xd1, 0x21, 0x1f, 0x33, 0x1a, 0xc7, 0x28, 0x54, 0x9e, 0x42,
 | 
			
		||||
	0x71, 0xd4, 0x9d, 0x8e, 0x87, 0x03, 0xf9, 0x58, 0x93, 0x6f, 0xef, 0xcc, 0x93, 0x12, 0x8f, 0x82,
 | 
			
		||||
	0x2c, 0x2d, 0xa7, 0x73, 0xca, 0xa7, 0xd7, 0x0f, 0x6f, 0x73, 0x8c, 0x49, 0xa4, 0x9d, 0x7d, 0xfc,
 | 
			
		||||
	0xac, 0xd7, 0xbe, 0x7e, 0xd1, 0xab, 0xdf, 0xf4, 0xd4, 0xcd, 0xbd, 0x5e, 0xfb, 0x71, 0xaf, 0xd7,
 | 
			
		||||
	0x3e, 0xe4, 0x3a, 0xd8, 0xe4, 0x3a, 0xf8, 0x96, 0xeb, 0xe0, 0x57, 0xae, 0x83, 0xb9, 0x58, 0xc4,
 | 
			
		||||
	0x70, 0xf9, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x19, 0xf7, 0x5b, 0x8f, 0x4e, 0x03, 0x00, 0x00,
 | 
			
		||||
	// 545 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0x3f, 0x6f, 0xd3, 0x40,
 | 
			
		||||
	0x18, 0xc6, 0x7d, 0x6e, 0xeb, 0xa6, 0xe7, 0xb6, 0x18, 0x13, 0x55, 0xc6, 0x20, 0xdb, 0xea, 0x64,
 | 
			
		||||
	0x31, 0xd8, 0x22, 0xdd, 0xd8, 0xf2, 0x4f, 0xc8, 0x42, 0x72, 0x23, 0x27, 0x11, 0x6c, 0x91, 0x13,
 | 
			
		||||
	0x5f, 0xcc, 0xa9, 0xcd, 0x9d, 0x65, 0x9f, 0x81, 0x6c, 0x8c, 0xa8, 0x13, 0x5f, 0xa0, 0x13, 0x7c,
 | 
			
		||||
	0x0a, 0x3e, 0x41, 0x46, 0x26, 0xc4, 0x14, 0xa8, 0x3f, 0x09, 0x3a, 0xdb, 0x49, 0x23, 0x60, 0x39,
 | 
			
		||||
	0xbd, 0xef, 0xf3, 0x7b, 0xee, 0xbd, 0xf7, 0x1e, 0xf8, 0x22, 0xc6, 0xec, 0x6d, 0x3e, 0x75, 0x66,
 | 
			
		||||
	0x74, 0xe1, 0xce, 0x28, 0x61, 0x21, 0x26, 0x28, 0x8d, 0x76, 0xcb, 0x30, 0xc1, 0x2e, 0x5b, 0x26,
 | 
			
		||||
	0x28, 0x73, 0x59, 0x98, 0x5d, 0x95, 0x87, 0x93, 0xa4, 0x94, 0x51, 0xf5, 0xd1, 0xbd, 0xcb, 0x79,
 | 
			
		||||
	0xf7, 0xdc, 0x29, 0x4d, 0x7a, 0x33, 0xa6, 0x31, 0x2d, 0xb9, 0xcb, 0xab, 0xca, 0xaa, 0x9b, 0x31,
 | 
			
		||||
	0xa5, 0xf1, 0x35, 0x72, 0xcb, 0x6e, 0x9a, 0xcf, 0x5d, 0x86, 0x17, 0x28, 0x63, 0xe1, 0x22, 0xa9,
 | 
			
		||||
	0x0d, 0x8f, 0xff, 0x36, 0x84, 0x64, 0x59, 0xa1, 0xf3, 0x42, 0x84, 0x87, 0x83, 0x94, 0xce, 0x50,
 | 
			
		||||
	0x96, 0xa9, 0x2d, 0x78, 0xbc, 0x7d, 0x74, 0x82, 0x23, 0x0d, 0x58, 0xc0, 0x3e, 0xea, 0x3c, 0x28,
 | 
			
		||||
	0xd6, 0xa6, 0xdc, 0xdd, 0xe8, 0x5e, 0x2f, 0x90, 0xb7, 0x26, 0x2f, 0x52, 0xcf, 0xa0, 0x88, 0x23,
 | 
			
		||||
	0x4d, 0x2c, 0x9d, 0x52, 0xb1, 0x36, 0x45, 0xaf, 0x17, 0x88, 0x38, 0x52, 0x15, 0xb8, 0x97, 0xe0,
 | 
			
		||||
	0x48, 0xdb, 0xb3, 0x80, 0x7d, 0x12, 0xf0, 0x52, 0xbd, 0x80, 0x52, 0xc6, 0x42, 0x96, 0x67, 0xda,
 | 
			
		||||
	0xbe, 0x05, 0xec, 0xd3, 0xd6, 0x13, 0xe7, 0x3f, 0x3f, 0x74, 0x86, 0xa5, 0x25, 0xa8, 0xad, 0x6a,
 | 
			
		||||
	0x13, 0x1e, 0x64, 0x2c, 0xc2, 0x44, 0x3b, 0xe0, 0x2f, 0x04, 0x55, 0xa3, 0x9e, 0xf1, 0x51, 0x11,
 | 
			
		||||
	0xcd, 0x99, 0x26, 0x95, 0x72, 0xdd, 0xd5, 0x3a, 0x4a, 0x53, 0xed, 0x70, 0xab, 0xa3, 0x34, 0x55,
 | 
			
		||||
	0x75, 0xd8, 0x60, 0x28, 0x5d, 0x60, 0x12, 0x5e, 0x6b, 0x0d, 0x0b, 0xd8, 0x8d, 0x60, 0xdb, 0xab,
 | 
			
		||||
	0x26, 0x94, 0xd1, 0x07, 0xcc, 0x26, 0xf5, 0x6e, 0x47, 0xe5, 0xc2, 0x90, 0x4b, 0xd5, 0x2a, 0x6a,
 | 
			
		||||
	0x1b, 0x1e, 0xf1, 0x0e, 0x45, 0x93, 0x90, 0x69, 0xd0, 0x02, 0xb6, 0xdc, 0xd2, 0x9d, 0x2a, 0x50,
 | 
			
		||||
	0x67, 0x13, 0xa8, 0x33, 0xda, 0x24, 0xde, 0x69, 0xac, 0xd6, 0xa6, 0xf0, 0xf9, 0x97, 0x09, 0x82,
 | 
			
		||||
	0x46, 0x75, 0xad, 0xcd, 0xce, 0x3d, 0x28, 0xd7, 0x19, 0x7b, 0x64, 0x4e, 0x37, 0xd9, 0x80, 0xfb,
 | 
			
		||||
	0x6c, 0x6c, 0xb8, 0x8f, 0xc9, 0x9c, 0x96, 0x39, 0xca, 0xad, 0xe6, 0x3f, 0xe3, 0xdb, 0x64, 0x19,
 | 
			
		||||
	0x94, 0x8e, 0x67, 0x3f, 0x00, 0x94, 0xea, 0xc5, 0x0c, 0x78, 0x38, 0xf6, 0x5f, 0xf9, 0x97, 0xaf,
 | 
			
		||||
	0x7d, 0x45, 0xd0, 0x1f, 0xde, 0xdc, 0x5a, 0x27, 0x15, 0x18, 0x93, 0x2b, 0x42, 0xdf, 0x13, 0xce,
 | 
			
		||||
	0xbb, 0x41, 0xbf, 0x3d, 0xea, 0xf7, 0x14, 0xb0, 0xcb, 0xbb, 0x29, 0x0a, 0x19, 0x8a, 0x38, 0x0f,
 | 
			
		||||
	0xc6, 0xbe, 0xef, 0xf9, 0x2f, 0x15, 0x71, 0x97, 0x07, 0x39, 0x21, 0x98, 0xc4, 0x9c, 0x0f, 0x47,
 | 
			
		||||
	0x97, 0x83, 0x41, 0xbf, 0xa7, 0xec, 0xed, 0xf2, 0x21, 0xa3, 0x49, 0x82, 0x22, 0xf5, 0x29, 0x94,
 | 
			
		||||
	0x06, 0xed, 0xf1, 0xb0, 0xdf, 0x53, 0xf6, 0x75, 0xe5, 0xe6, 0xd6, 0x3a, 0xae, 0xf0, 0x20, 0xcc,
 | 
			
		||||
	0xb3, 0x6a, 0x3a, 0xa7, 0x7c, 0xfa, 0xc1, 0xee, 0x6d, 0x8e, 0x31, 0x89, 0xf5, 0xd3, 0x4f, 0x5f,
 | 
			
		||||
	0x0c, 0xe1, 0xdb, 0x57, 0xa3, 0xfe, 0x4d, 0x47, 0x5b, 0xdd, 0x19, 0xc2, 0xcf, 0x3b, 0x43, 0xf8,
 | 
			
		||||
	0x58, 0x18, 0x60, 0x55, 0x18, 0xe0, 0x7b, 0x61, 0x80, 0xdf, 0x85, 0x01, 0xde, 0x08, 0x53, 0xa9,
 | 
			
		||||
	0x0c, 0xe2, 0xe2, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc3, 0x32, 0xd2, 0x86, 0x50, 0x03, 0x00,
 | 
			
		||||
	0x00,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/task/task.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/api/types/task/task.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,7 @@ syntax = "proto3";
 | 
			
		||||
 | 
			
		||||
package containerd.v1.types;
 | 
			
		||||
 | 
			
		||||
import "gogoproto/gogo.proto";
 | 
			
		||||
import weak "gogoproto/gogo.proto";
 | 
			
		||||
import "google/protobuf/timestamp.proto";
 | 
			
		||||
import "google/protobuf/any.proto";
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/containerd/containerd/dialer/dialer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/containerd/containerd/dialer/dialer.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -42,7 +42,7 @@ func Dialer(address string, timeout time.Duration) (net.Conn, error) {
 | 
			
		||||
		close(stopC)
 | 
			
		||||
		go func() {
 | 
			
		||||
			dr := <-synC
 | 
			
		||||
			if dr != nil {
 | 
			
		||||
			if dr != nil && dr.c != nil {
 | 
			
		||||
				dr.c.Close()
 | 
			
		||||
			}
 | 
			
		||||
		}()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/containerd/containerd/errdefs/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/containerd/containerd/errdefs/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -10,7 +10,6 @@ go_library(
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/pkg/errors:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/grpc:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/codes:go_default_library",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/status:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/github.com/containerd/containerd/errdefs/grpc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/containerd/containerd/errdefs/grpc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -4,7 +4,6 @@ import (
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/pkg/errors"
 | 
			
		||||
	"google.golang.org/grpc"
 | 
			
		||||
	"google.golang.org/grpc/codes"
 | 
			
		||||
	"google.golang.org/grpc/status"
 | 
			
		||||
)
 | 
			
		||||
@@ -61,7 +60,7 @@ func FromGRPC(err error) error {
 | 
			
		||||
 | 
			
		||||
	var cls error // divide these into error classes, becomes the cause
 | 
			
		||||
 | 
			
		||||
	switch grpc.Code(err) {
 | 
			
		||||
	switch code(err) {
 | 
			
		||||
	case codes.InvalidArgument:
 | 
			
		||||
		cls = ErrInvalidArgument
 | 
			
		||||
	case codes.AlreadyExists:
 | 
			
		||||
@@ -94,7 +93,7 @@ func FromGRPC(err error) error {
 | 
			
		||||
// Effectively, we just remove the string of cls from the end of err if it
 | 
			
		||||
// appears there.
 | 
			
		||||
func rebaseMessage(cls error, err error) string {
 | 
			
		||||
	desc := grpc.ErrorDesc(err)
 | 
			
		||||
	desc := errDesc(err)
 | 
			
		||||
	clss := cls.Error()
 | 
			
		||||
	if desc == clss {
 | 
			
		||||
		return ""
 | 
			
		||||
@@ -107,3 +106,17 @@ func isGRPCError(err error) bool {
 | 
			
		||||
	_, ok := status.FromError(err)
 | 
			
		||||
	return ok
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func code(err error) codes.Code {
 | 
			
		||||
	if s, ok := status.FromError(err); ok {
 | 
			
		||||
		return s.Code()
 | 
			
		||||
	}
 | 
			
		||||
	return codes.Unknown
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func errDesc(err error) string {
 | 
			
		||||
	if s, ok := status.FromError(err); ok {
 | 
			
		||||
		return s.Message()
 | 
			
		||||
	}
 | 
			
		||||
	return err.Error()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								vendor/github.com/docker/docker/pkg/parsers/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/docker/docker/pkg/parsers/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -16,7 +16,10 @@ filegroup(
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    srcs = [
 | 
			
		||||
        ":package-srcs",
 | 
			
		||||
        "//vendor/github.com/docker/docker/pkg/parsers/operatingsystem:all-srcs",
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										49
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = select({
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:darwin": [
 | 
			
		||||
            "operatingsystem_unix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:freebsd": [
 | 
			
		||||
            "operatingsystem_unix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:linux": [
 | 
			
		||||
            "operatingsystem_linux.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:solaris": [
 | 
			
		||||
            "operatingsystem_solaris.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:windows": [
 | 
			
		||||
            "operatingsystem_windows.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "//conditions:default": [],
 | 
			
		||||
    }),
 | 
			
		||||
    cgo = True,
 | 
			
		||||
    importpath = "github.com/docker/docker/pkg/parsers/operatingsystem",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = select({
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:linux": [
 | 
			
		||||
            "//vendor/github.com/mattn/go-shellwords:go_default_library",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:windows": [
 | 
			
		||||
            "//vendor/golang.org/x/sys/windows:go_default_library",
 | 
			
		||||
        ],
 | 
			
		||||
        "//conditions:default": [],
 | 
			
		||||
    }),
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										77
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/operatingsystem_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/operatingsystem_linux.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
			
		||||
// Package operatingsystem provides helper function to get the operating system
 | 
			
		||||
// name for different platforms.
 | 
			
		||||
package operatingsystem
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/mattn/go-shellwords"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	// file to use to detect if the daemon is running in a container
 | 
			
		||||
	proc1Cgroup = "/proc/1/cgroup"
 | 
			
		||||
 | 
			
		||||
	// file to check to determine Operating System
 | 
			
		||||
	etcOsRelease = "/etc/os-release"
 | 
			
		||||
 | 
			
		||||
	// used by stateless systems like Clear Linux
 | 
			
		||||
	altOsRelease = "/usr/lib/os-release"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// GetOperatingSystem gets the name of the current operating system.
 | 
			
		||||
func GetOperatingSystem() (string, error) {
 | 
			
		||||
	osReleaseFile, err := os.Open(etcOsRelease)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if !os.IsNotExist(err) {
 | 
			
		||||
			return "", fmt.Errorf("Error opening %s: %v", etcOsRelease, err)
 | 
			
		||||
		}
 | 
			
		||||
		osReleaseFile, err = os.Open(altOsRelease)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return "", fmt.Errorf("Error opening %s: %v", altOsRelease, err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	defer osReleaseFile.Close()
 | 
			
		||||
 | 
			
		||||
	var prettyName string
 | 
			
		||||
	scanner := bufio.NewScanner(osReleaseFile)
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		line := scanner.Text()
 | 
			
		||||
		if strings.HasPrefix(line, "PRETTY_NAME=") {
 | 
			
		||||
			data := strings.SplitN(line, "=", 2)
 | 
			
		||||
			prettyNames, err := shellwords.Parse(data[1])
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return "", fmt.Errorf("PRETTY_NAME is invalid: %s", err.Error())
 | 
			
		||||
			}
 | 
			
		||||
			if len(prettyNames) != 1 {
 | 
			
		||||
				return "", fmt.Errorf("PRETTY_NAME needs to be enclosed by quotes if they have spaces: %s", data[1])
 | 
			
		||||
			}
 | 
			
		||||
			prettyName = prettyNames[0]
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if prettyName != "" {
 | 
			
		||||
		return prettyName, nil
 | 
			
		||||
	}
 | 
			
		||||
	// If not set, defaults to PRETTY_NAME="Linux"
 | 
			
		||||
	// c.f. http://www.freedesktop.org/software/systemd/man/os-release.html
 | 
			
		||||
	return "Linux", nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsContainerized returns true if we are running inside a container.
 | 
			
		||||
func IsContainerized() (bool, error) {
 | 
			
		||||
	b, err := ioutil.ReadFile(proc1Cgroup)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return false, err
 | 
			
		||||
	}
 | 
			
		||||
	for _, line := range bytes.Split(b, []byte{'\n'}) {
 | 
			
		||||
		if len(line) > 0 && !bytes.HasSuffix(line, []byte{'/'}) && !bytes.HasSuffix(line, []byte("init.scope")) {
 | 
			
		||||
			return true, nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return false, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										37
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/operatingsystem_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/operatingsystem_solaris.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
// +build solaris,cgo
 | 
			
		||||
 | 
			
		||||
package operatingsystem
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
#include <zone.h>
 | 
			
		||||
*/
 | 
			
		||||
import "C"
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"errors"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var etcOsRelease = "/etc/release"
 | 
			
		||||
 | 
			
		||||
// GetOperatingSystem gets the name of the current operating system.
 | 
			
		||||
func GetOperatingSystem() (string, error) {
 | 
			
		||||
	b, err := ioutil.ReadFile(etcOsRelease)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	if i := bytes.Index(b, []byte("\n")); i >= 0 {
 | 
			
		||||
		b = bytes.Trim(b[:i], " ")
 | 
			
		||||
		return string(b), nil
 | 
			
		||||
	}
 | 
			
		||||
	return "", errors.New("release not found")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsContainerized returns true if we are running inside a container.
 | 
			
		||||
func IsContainerized() (bool, error) {
 | 
			
		||||
	if C.getzoneid() != 0 {
 | 
			
		||||
		return true, nil
 | 
			
		||||
	}
 | 
			
		||||
	return false, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/operatingsystem_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/operatingsystem_unix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
// +build freebsd darwin
 | 
			
		||||
 | 
			
		||||
package operatingsystem
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// GetOperatingSystem gets the name of the current operating system.
 | 
			
		||||
func GetOperatingSystem() (string, error) {
 | 
			
		||||
	cmd := exec.Command("uname", "-s")
 | 
			
		||||
	osName, err := cmd.Output()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	return string(osName), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsContainerized returns true if we are running inside a container.
 | 
			
		||||
// No-op on FreeBSD and Darwin, always returns false.
 | 
			
		||||
func IsContainerized() (bool, error) {
 | 
			
		||||
	// TODO: Implement jail detection for freeBSD
 | 
			
		||||
	return false, errors.New("Cannot detect if we are in container")
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										50
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/operatingsystem_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								vendor/github.com/docker/docker/pkg/parsers/operatingsystem/operatingsystem_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
package operatingsystem
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"unsafe"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/sys/windows"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// See https://code.google.com/p/go/source/browse/src/pkg/mime/type_windows.go?r=d14520ac25bf6940785aabb71f5be453a286f58c
 | 
			
		||||
// for a similar sample
 | 
			
		||||
 | 
			
		||||
// GetOperatingSystem gets the name of the current operating system.
 | 
			
		||||
func GetOperatingSystem() (string, error) {
 | 
			
		||||
 | 
			
		||||
	var h windows.Handle
 | 
			
		||||
 | 
			
		||||
	// Default return value
 | 
			
		||||
	ret := "Unknown Operating System"
 | 
			
		||||
 | 
			
		||||
	if err := windows.RegOpenKeyEx(windows.HKEY_LOCAL_MACHINE,
 | 
			
		||||
		windows.StringToUTF16Ptr(`SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\`),
 | 
			
		||||
		0,
 | 
			
		||||
		windows.KEY_READ,
 | 
			
		||||
		&h); err != nil {
 | 
			
		||||
		return ret, err
 | 
			
		||||
	}
 | 
			
		||||
	defer windows.RegCloseKey(h)
 | 
			
		||||
 | 
			
		||||
	var buf [1 << 10]uint16
 | 
			
		||||
	var typ uint32
 | 
			
		||||
	n := uint32(len(buf) * 2) // api expects array of bytes, not uint16
 | 
			
		||||
 | 
			
		||||
	if err := windows.RegQueryValueEx(h,
 | 
			
		||||
		windows.StringToUTF16Ptr("ProductName"),
 | 
			
		||||
		nil,
 | 
			
		||||
		&typ,
 | 
			
		||||
		(*byte)(unsafe.Pointer(&buf[0])),
 | 
			
		||||
		&n); err != nil {
 | 
			
		||||
		return ret, err
 | 
			
		||||
	}
 | 
			
		||||
	ret = windows.UTF16ToString(buf[:])
 | 
			
		||||
 | 
			
		||||
	return ret, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// IsContainerized returns true if we are running inside a container.
 | 
			
		||||
// No-op on Windows, always returns false.
 | 
			
		||||
func IsContainerized() (bool, error) {
 | 
			
		||||
	return false, nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/golang/protobuf/ptypes/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/golang/protobuf/ptypes/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -31,7 +31,6 @@ filegroup(
 | 
			
		||||
        ":package-srcs",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/any:all-srcs",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/duration:all-srcs",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/empty:all-srcs",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/struct:all-srcs",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/timestamp:all-srcs",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/wrappers:all-srcs",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								vendor/github.com/golang/protobuf/ptypes/empty/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								vendor/github.com/golang/protobuf/ptypes/empty/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,29 +0,0 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "go_default_library_protos",
 | 
			
		||||
    srcs = ["empty.proto"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["empty.pb.go"],
 | 
			
		||||
    importpath = "github.com/golang/protobuf/ptypes/empty",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = ["//vendor/github.com/golang/protobuf/proto:go_default_library"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										79
									
								
								vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										79
									
								
								vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,79 +0,0 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// source: google/protobuf/empty.proto
 | 
			
		||||
 | 
			
		||||
package empty
 | 
			
		||||
 | 
			
		||||
import proto "github.com/golang/protobuf/proto"
 | 
			
		||||
import fmt "fmt"
 | 
			
		||||
import math "math"
 | 
			
		||||
 | 
			
		||||
// Reference imports to suppress errors if they are not otherwise used.
 | 
			
		||||
var _ = proto.Marshal
 | 
			
		||||
var _ = fmt.Errorf
 | 
			
		||||
var _ = math.Inf
 | 
			
		||||
 | 
			
		||||
// This is a compile-time assertion to ensure that this generated file
 | 
			
		||||
// is compatible with the proto package it is being compiled against.
 | 
			
		||||
// A compilation error at this line likely means your copy of the
 | 
			
		||||
// proto package needs to be updated.
 | 
			
		||||
const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
 | 
			
		||||
 | 
			
		||||
// A generic empty message that you can re-use to avoid defining duplicated
 | 
			
		||||
// empty messages in your APIs. A typical example is to use it as the request
 | 
			
		||||
// or the response type of an API method. For instance:
 | 
			
		||||
//
 | 
			
		||||
//     service Foo {
 | 
			
		||||
//       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
 | 
			
		||||
//     }
 | 
			
		||||
//
 | 
			
		||||
// The JSON representation for `Empty` is empty JSON object `{}`.
 | 
			
		||||
type Empty struct {
 | 
			
		||||
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 | 
			
		||||
	XXX_unrecognized     []byte   `json:"-"`
 | 
			
		||||
	XXX_sizecache        int32    `json:"-"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (m *Empty) Reset()         { *m = Empty{} }
 | 
			
		||||
func (m *Empty) String() string { return proto.CompactTextString(m) }
 | 
			
		||||
func (*Empty) ProtoMessage()    {}
 | 
			
		||||
func (*Empty) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return fileDescriptor_empty_39e6d6db0632e5b2, []int{0}
 | 
			
		||||
}
 | 
			
		||||
func (*Empty) XXX_WellKnownType() string { return "Empty" }
 | 
			
		||||
func (m *Empty) XXX_Unmarshal(b []byte) error {
 | 
			
		||||
	return xxx_messageInfo_Empty.Unmarshal(m, b)
 | 
			
		||||
}
 | 
			
		||||
func (m *Empty) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
 | 
			
		||||
	return xxx_messageInfo_Empty.Marshal(b, m, deterministic)
 | 
			
		||||
}
 | 
			
		||||
func (dst *Empty) XXX_Merge(src proto.Message) {
 | 
			
		||||
	xxx_messageInfo_Empty.Merge(dst, src)
 | 
			
		||||
}
 | 
			
		||||
func (m *Empty) XXX_Size() int {
 | 
			
		||||
	return xxx_messageInfo_Empty.Size(m)
 | 
			
		||||
}
 | 
			
		||||
func (m *Empty) XXX_DiscardUnknown() {
 | 
			
		||||
	xxx_messageInfo_Empty.DiscardUnknown(m)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var xxx_messageInfo_Empty proto.InternalMessageInfo
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	proto.RegisterType((*Empty)(nil), "google.protobuf.Empty")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() { proto.RegisterFile("google/protobuf/empty.proto", fileDescriptor_empty_39e6d6db0632e5b2) }
 | 
			
		||||
 | 
			
		||||
var fileDescriptor_empty_39e6d6db0632e5b2 = []byte{
 | 
			
		||||
	// 148 bytes of a gzipped FileDescriptorProto
 | 
			
		||||
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0xcf, 0xcf, 0x4f,
 | 
			
		||||
	0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcd, 0x2d, 0x28,
 | 
			
		||||
	0xa9, 0xd4, 0x03, 0x73, 0x85, 0xf8, 0x21, 0x92, 0x7a, 0x30, 0x49, 0x25, 0x76, 0x2e, 0x56, 0x57,
 | 
			
		||||
	0x90, 0xbc, 0x53, 0x19, 0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x9a, 0xbc, 0x13, 0x17, 0x58, 0x36,
 | 
			
		||||
	0x00, 0xc4, 0x0d, 0x60, 0x8c, 0x52, 0x4f, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf,
 | 
			
		||||
	0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0x47, 0x58, 0x53, 0x50, 0x52, 0x59, 0x90, 0x5a, 0x0c,
 | 
			
		||||
	0xb1, 0xed, 0x07, 0x23, 0xe3, 0x22, 0x26, 0x66, 0xf7, 0x00, 0xa7, 0x55, 0x4c, 0x72, 0xee, 0x10,
 | 
			
		||||
	0x13, 0x03, 0xa0, 0xea, 0xf4, 0xc2, 0x53, 0x73, 0x72, 0xbc, 0xf3, 0xf2, 0xcb, 0xf3, 0x42, 0x40,
 | 
			
		||||
	0xea, 0x93, 0xd8, 0xc0, 0x06, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x64, 0xd4, 0xb3, 0xa6,
 | 
			
		||||
	0xb7, 0x00, 0x00, 0x00,
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								vendor/github.com/golang/protobuf/ptypes/empty/empty.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										52
									
								
								vendor/github.com/golang/protobuf/ptypes/empty/empty.proto
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,52 +0,0 @@
 | 
			
		||||
// Protocol Buffers - Google's data interchange format
 | 
			
		||||
// Copyright 2008 Google Inc.  All rights reserved.
 | 
			
		||||
// https://developers.google.com/protocol-buffers/
 | 
			
		||||
//
 | 
			
		||||
// Redistribution and use in source and binary forms, with or without
 | 
			
		||||
// modification, are permitted provided that the following conditions are
 | 
			
		||||
// met:
 | 
			
		||||
//
 | 
			
		||||
//     * Redistributions of source code must retain the above copyright
 | 
			
		||||
// notice, this list of conditions and the following disclaimer.
 | 
			
		||||
//     * Redistributions in binary form must reproduce the above
 | 
			
		||||
// copyright notice, this list of conditions and the following disclaimer
 | 
			
		||||
// in the documentation and/or other materials provided with the
 | 
			
		||||
// distribution.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
 | 
			
		||||
syntax = "proto3";
 | 
			
		||||
 | 
			
		||||
package google.protobuf;
 | 
			
		||||
 | 
			
		||||
option csharp_namespace = "Google.Protobuf.WellKnownTypes";
 | 
			
		||||
option go_package = "github.com/golang/protobuf/ptypes/empty";
 | 
			
		||||
option java_package = "com.google.protobuf";
 | 
			
		||||
option java_outer_classname = "EmptyProto";
 | 
			
		||||
option java_multiple_files = true;
 | 
			
		||||
option objc_class_prefix = "GPB";
 | 
			
		||||
option cc_enable_arenas = true;
 | 
			
		||||
 | 
			
		||||
// A generic empty message that you can re-use to avoid defining duplicated
 | 
			
		||||
// empty messages in your APIs. A typical example is to use it as the request
 | 
			
		||||
// or the response type of an API method. For instance:
 | 
			
		||||
//
 | 
			
		||||
//     service Foo {
 | 
			
		||||
//       rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
 | 
			
		||||
//     }
 | 
			
		||||
//
 | 
			
		||||
// The JSON representation for `Empty` is empty JSON object `{}`.
 | 
			
		||||
message Empty {}
 | 
			
		||||
							
								
								
									
										10
									
								
								vendor/github.com/google/cadvisor/cache/memory/memory.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/github.com/google/cadvisor/cache/memory/memory.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -70,16 +70,16 @@ type InMemoryCache struct {
 | 
			
		||||
	backend           storage.StorageDriver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *InMemoryCache) AddStats(ref info.ContainerReference, stats *info.ContainerStats) error {
 | 
			
		||||
func (self *InMemoryCache) AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error {
 | 
			
		||||
	var cstore *containerCache
 | 
			
		||||
	var ok bool
 | 
			
		||||
 | 
			
		||||
	func() {
 | 
			
		||||
		self.lock.Lock()
 | 
			
		||||
		defer self.lock.Unlock()
 | 
			
		||||
		if cstore, ok = self.containerCacheMap[ref.Name]; !ok {
 | 
			
		||||
			cstore = newContainerStore(ref, self.maxAge)
 | 
			
		||||
			self.containerCacheMap[ref.Name] = cstore
 | 
			
		||||
		if cstore, ok = self.containerCacheMap[cInfo.ContainerReference.Name]; !ok {
 | 
			
		||||
			cstore = newContainerStore(cInfo.ContainerReference, self.maxAge)
 | 
			
		||||
			self.containerCacheMap[cInfo.ContainerReference.Name] = cstore
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
@@ -87,7 +87,7 @@ func (self *InMemoryCache) AddStats(ref info.ContainerReference, stats *info.Con
 | 
			
		||||
		// TODO(monnand): To deal with long delay write operations, we
 | 
			
		||||
		// may want to start a pool of goroutines to do write
 | 
			
		||||
		// operations.
 | 
			
		||||
		if err := self.backend.AddStats(ref, stats); err != nil {
 | 
			
		||||
		if err := self.backend.AddStats(cInfo, stats); err != nil {
 | 
			
		||||
			glog.Error(err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								vendor/github.com/google/cadvisor/container/common/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/google/cadvisor/container/common/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -5,18 +5,18 @@ go_library(
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "container_hints.go",
 | 
			
		||||
        "fsHandler.go",
 | 
			
		||||
        "fsnotify_watcher.go",
 | 
			
		||||
        "helpers.go",
 | 
			
		||||
        "inotify_watcher.go",
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "github.com/google/cadvisor/container/common",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/fsnotify/fsnotify:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/container:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/info/v1:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/utils:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/exp/inotify:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -17,15 +17,15 @@ package common
 | 
			
		||||
import (
 | 
			
		||||
	"sync"
 | 
			
		||||
 | 
			
		||||
	"golang.org/x/exp/inotify"
 | 
			
		||||
	"github.com/fsnotify/fsnotify"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Watcher for container-related inotify events in the cgroup hierarchy.
 | 
			
		||||
// Watcher for container-related fsnotify events in the cgroup hierarchy.
 | 
			
		||||
//
 | 
			
		||||
// Implementation is thread-safe.
 | 
			
		||||
type InotifyWatcher struct {
 | 
			
		||||
	// Underlying inotify watcher.
 | 
			
		||||
	watcher *inotify.Watcher
 | 
			
		||||
type FsnotifyWatcher struct {
 | 
			
		||||
	// Underlying fsnotify watcher.
 | 
			
		||||
	watcher *fsnotify.Watcher
 | 
			
		||||
 | 
			
		||||
	// Map of containers being watched to cgroup paths watched for that container.
 | 
			
		||||
	containersWatched map[string]map[string]bool
 | 
			
		||||
@@ -34,28 +34,28 @@ type InotifyWatcher struct {
 | 
			
		||||
	lock sync.Mutex
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewInotifyWatcher() (*InotifyWatcher, error) {
 | 
			
		||||
	w, err := inotify.NewWatcher()
 | 
			
		||||
func NewFsnotifyWatcher() (*FsnotifyWatcher, error) {
 | 
			
		||||
	w, err := fsnotify.NewWatcher()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &InotifyWatcher{
 | 
			
		||||
	return &FsnotifyWatcher{
 | 
			
		||||
		watcher:           w,
 | 
			
		||||
		containersWatched: make(map[string]map[string]bool),
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Add a watch to the specified directory. Returns if the container was already being watched.
 | 
			
		||||
func (iw *InotifyWatcher) AddWatch(containerName, dir string) (bool, error) {
 | 
			
		||||
func (iw *FsnotifyWatcher) AddWatch(containerName, dir string) (bool, error) {
 | 
			
		||||
	iw.lock.Lock()
 | 
			
		||||
	defer iw.lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	cgroupsWatched, alreadyWatched := iw.containersWatched[containerName]
 | 
			
		||||
 | 
			
		||||
	// Register an inotify notification.
 | 
			
		||||
	// Register an fsnotify notification.
 | 
			
		||||
	if !cgroupsWatched[dir] {
 | 
			
		||||
		err := iw.watcher.AddWatch(dir, inotify.IN_CREATE|inotify.IN_DELETE|inotify.IN_MOVE)
 | 
			
		||||
		err := iw.watcher.Add(dir)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return alreadyWatched, err
 | 
			
		||||
		}
 | 
			
		||||
@@ -74,7 +74,7 @@ func (iw *InotifyWatcher) AddWatch(containerName, dir string) (bool, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Remove watch from the specified directory. Returns if this was the last watch on the specified container.
 | 
			
		||||
func (iw *InotifyWatcher) RemoveWatch(containerName, dir string) (bool, error) {
 | 
			
		||||
func (iw *FsnotifyWatcher) RemoveWatch(containerName, dir string) (bool, error) {
 | 
			
		||||
	iw.lock.Lock()
 | 
			
		||||
	defer iw.lock.Unlock()
 | 
			
		||||
 | 
			
		||||
@@ -84,9 +84,9 @@ func (iw *InotifyWatcher) RemoveWatch(containerName, dir string) (bool, error) {
 | 
			
		||||
		return false, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Remove the inotify watch if it exists.
 | 
			
		||||
	// Remove the fsnotify watch if it exists.
 | 
			
		||||
	if cgroupsWatched[dir] {
 | 
			
		||||
		err := iw.watcher.RemoveWatch(dir)
 | 
			
		||||
		err := iw.watcher.Remove(dir)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return false, nil
 | 
			
		||||
		}
 | 
			
		||||
@@ -103,22 +103,22 @@ func (iw *InotifyWatcher) RemoveWatch(containerName, dir string) (bool, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Errors are returned on this channel.
 | 
			
		||||
func (iw *InotifyWatcher) Error() chan error {
 | 
			
		||||
	return iw.watcher.Error
 | 
			
		||||
func (iw *FsnotifyWatcher) Error() chan error {
 | 
			
		||||
	return iw.watcher.Errors
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Events are returned on this channel.
 | 
			
		||||
func (iw *InotifyWatcher) Event() chan *inotify.Event {
 | 
			
		||||
	return iw.watcher.Event
 | 
			
		||||
func (iw *FsnotifyWatcher) Event() chan fsnotify.Event {
 | 
			
		||||
	return iw.watcher.Events
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Closes the inotify watcher.
 | 
			
		||||
func (iw *InotifyWatcher) Close() error {
 | 
			
		||||
// Closes the fsnotify watcher.
 | 
			
		||||
func (iw *FsnotifyWatcher) Close() error {
 | 
			
		||||
	return iw.watcher.Close()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns a map of containers to the cgroup paths being watched.
 | 
			
		||||
func (iw *InotifyWatcher) GetWatches() map[string][]string {
 | 
			
		||||
func (iw *FsnotifyWatcher) GetWatches() map[string][]string {
 | 
			
		||||
	out := make(map[string][]string, len(iw.containersWatched))
 | 
			
		||||
	for k, v := range iw.containersWatched {
 | 
			
		||||
		out[k] = mapToSlice(v)
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/google/cadvisor/container/common/helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/cadvisor/container/common/helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -40,7 +40,7 @@ func DebugInfo(watches map[string][]string) map[string][]string {
 | 
			
		||||
			lines = append(lines, fmt.Sprintf("\t%s", cg))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	out["Inotify watches"] = lines
 | 
			
		||||
	out["Fsnotify watches"] = lines
 | 
			
		||||
 | 
			
		||||
	return out
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										3
									
								
								vendor/github.com/google/cadvisor/container/containerd/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								vendor/github.com/google/cadvisor/container/containerd/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -18,15 +18,14 @@ go_library(
 | 
			
		||||
        "//vendor/github.com/containerd/containerd/dialer:go_default_library",
 | 
			
		||||
        "//vendor/github.com/containerd/containerd/errdefs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/containerd/containerd/namespaces:go_default_library",
 | 
			
		||||
        "//vendor/github.com/gogo/protobuf/types:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/protobuf/ptypes/empty:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/container:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/container/common:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/container/libcontainer:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/info/v1:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/manager/watcher:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runtime-spec/specs-go:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								vendor/github.com/google/cadvisor/container/containerd/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								vendor/github.com/google/cadvisor/container/containerd/client.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -16,6 +16,8 @@ package containerd
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"net"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
@@ -25,7 +27,7 @@ import (
 | 
			
		||||
	"github.com/containerd/containerd/containers"
 | 
			
		||||
	"github.com/containerd/containerd/dialer"
 | 
			
		||||
	"github.com/containerd/containerd/errdefs"
 | 
			
		||||
	pempty "github.com/golang/protobuf/ptypes/empty"
 | 
			
		||||
	ptypes "github.com/gogo/protobuf/types"
 | 
			
		||||
	"google.golang.org/grpc"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -49,16 +51,29 @@ type containerdClient interface {
 | 
			
		||||
var once sync.Once
 | 
			
		||||
var ctrdClient containerdClient = nil
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	address           = "/run/containerd/containerd.sock"
 | 
			
		||||
	maxBackoffDelay   = 3 * time.Second
 | 
			
		||||
	connectionTimeout = 2 * time.Second
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Client creates a containerd client
 | 
			
		||||
func Client() (containerdClient, error) {
 | 
			
		||||
	var retErr error
 | 
			
		||||
	once.Do(func() {
 | 
			
		||||
		tryConn, err := net.DialTimeout("unix", address, connectionTimeout)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			retErr = fmt.Errorf("containerd: cannot unix dial containerd api service: %v", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		tryConn.Close()
 | 
			
		||||
 | 
			
		||||
		gopts := []grpc.DialOption{
 | 
			
		||||
			grpc.WithInsecure(),
 | 
			
		||||
			grpc.WithDialer(dialer.Dialer),
 | 
			
		||||
			grpc.WithBlock(),
 | 
			
		||||
			grpc.WithTimeout(2 * time.Second),
 | 
			
		||||
			grpc.WithBackoffMaxDelay(3 * time.Second),
 | 
			
		||||
			grpc.WithBackoffMaxDelay(maxBackoffDelay),
 | 
			
		||||
			grpc.WithTimeout(connectionTimeout),
 | 
			
		||||
		}
 | 
			
		||||
		unary, stream := newNSInterceptors(k8sNamespace)
 | 
			
		||||
		gopts = append(gopts,
 | 
			
		||||
@@ -66,7 +81,7 @@ func Client() (containerdClient, error) {
 | 
			
		||||
			grpc.WithStreamInterceptor(stream),
 | 
			
		||||
		)
 | 
			
		||||
 | 
			
		||||
		conn, err := grpc.Dial(dialer.DialAddress("/var/run/containerd/containerd.sock"), gopts...)
 | 
			
		||||
		conn, err := grpc.Dial(dialer.DialAddress(address), gopts...)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			retErr = err
 | 
			
		||||
			return
 | 
			
		||||
@@ -101,7 +116,7 @@ func (c *client) TaskPid(ctx context.Context, id string) (uint32, error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *client) Version(ctx context.Context) (string, error) {
 | 
			
		||||
	response, err := c.versionService.Version(ctx, &pempty.Empty{})
 | 
			
		||||
	response, err := c.versionService.Version(ctx, &ptypes.Empty{})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", errdefs.FromGRPC(err)
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								vendor/github.com/google/cadvisor/container/containerd/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										55
									
								
								vendor/github.com/google/cadvisor/container/containerd/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -23,7 +23,6 @@ import (
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/containerd/containerd/errdefs"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer/cgroups"
 | 
			
		||||
	cgroupfs "github.com/opencontainers/runc/libcontainer/cgroups/fs"
 | 
			
		||||
	libcontainerconfigs "github.com/opencontainers/runc/libcontainer/configs"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
@@ -37,31 +36,21 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type containerdContainerHandler struct {
 | 
			
		||||
	client             containerdClient
 | 
			
		||||
	name               string
 | 
			
		||||
	id                 string
 | 
			
		||||
	aliases            []string
 | 
			
		||||
	machineInfoFactory info.MachineInfoFactory
 | 
			
		||||
	// Absolute path to the cgroup hierarchies of this container.
 | 
			
		||||
	// (e.g.: "cpu" -> "/sys/fs/cgroup/cpu/test")
 | 
			
		||||
	cgroupPaths map[string]string
 | 
			
		||||
	// Manager of this container's cgroups.
 | 
			
		||||
	cgroupManager cgroups.Manager
 | 
			
		||||
	fsInfo      fs.FsInfo
 | 
			
		||||
	poolName      string
 | 
			
		||||
	// Time at which this container was created.
 | 
			
		||||
	creationTime time.Time
 | 
			
		||||
	// Metadata associated with the container.
 | 
			
		||||
	labels map[string]string
 | 
			
		||||
	reference info.ContainerReference
 | 
			
		||||
	envs      map[string]string
 | 
			
		||||
	// The container PID used to switch namespaces as required
 | 
			
		||||
	pid int
 | 
			
		||||
	labels    map[string]string
 | 
			
		||||
	// Image name used for this container.
 | 
			
		||||
	image string
 | 
			
		||||
	// The host root FS to read
 | 
			
		||||
	rootFs string
 | 
			
		||||
	// Filesystem handler.
 | 
			
		||||
	ignoreMetrics container.MetricSet
 | 
			
		||||
 | 
			
		||||
	libcontainerHandler *containerlibcontainer.Handler
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ container.ContainerHandler = &containerdContainerHandler{}
 | 
			
		||||
@@ -131,25 +120,27 @@ func newContainerdContainerHandler(
 | 
			
		||||
		rootfs = "/rootfs"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	containerReference := info.ContainerReference{
 | 
			
		||||
		Id:        id,
 | 
			
		||||
		Name:      name,
 | 
			
		||||
		Namespace: k8sContainerdNamespace,
 | 
			
		||||
		Aliases:   []string{id, name},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	libcontainerHandler := containerlibcontainer.NewHandler(cgroupManager, rootfs, int(taskPid), ignoreMetrics)
 | 
			
		||||
 | 
			
		||||
	handler := &containerdContainerHandler{
 | 
			
		||||
		id:                 id,
 | 
			
		||||
		client:             client,
 | 
			
		||||
		name:               name,
 | 
			
		||||
		machineInfoFactory:  machineInfoFactory,
 | 
			
		||||
		cgroupPaths:         cgroupPaths,
 | 
			
		||||
		cgroupManager:      cgroupManager,
 | 
			
		||||
		rootFs:             rootfs,
 | 
			
		||||
		fsInfo:              fsInfo,
 | 
			
		||||
		envs:                make(map[string]string),
 | 
			
		||||
		labels:             make(map[string]string),
 | 
			
		||||
		labels:              cntr.Labels,
 | 
			
		||||
		ignoreMetrics:       ignoreMetrics,
 | 
			
		||||
		pid:                int(taskPid),
 | 
			
		||||
		creationTime:       cntr.CreatedAt,
 | 
			
		||||
		reference:           containerReference,
 | 
			
		||||
		libcontainerHandler: libcontainerHandler,
 | 
			
		||||
	}
 | 
			
		||||
	// Add the name and bare ID as aliases of the container.
 | 
			
		||||
	handler.labels = cntr.Labels
 | 
			
		||||
	handler.image = cntr.Image
 | 
			
		||||
	handler.aliases = []string{id, name}
 | 
			
		||||
	for _, envVar := range spec.Process.Env {
 | 
			
		||||
		if envVar != "" {
 | 
			
		||||
			splits := strings.SplitN(envVar, "=", 2)
 | 
			
		||||
@@ -163,13 +154,7 @@ func newContainerdContainerHandler(
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *containerdContainerHandler) ContainerReference() (info.ContainerReference, error) {
 | 
			
		||||
	return info.ContainerReference{
 | 
			
		||||
		Id:        self.id,
 | 
			
		||||
		Name:      self.name,
 | 
			
		||||
		Namespace: k8sContainerdNamespace,
 | 
			
		||||
		Labels:    self.labels,
 | 
			
		||||
		Aliases:   self.aliases,
 | 
			
		||||
	}, nil
 | 
			
		||||
	return self.reference, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *containerdContainerHandler) needNet() bool {
 | 
			
		||||
@@ -208,7 +193,7 @@ func (self *containerdContainerHandler) getFsStats(stats *info.ContainerStats) e
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *containerdContainerHandler) GetStats() (*info.ContainerStats, error) {
 | 
			
		||||
	stats, err := containerlibcontainer.GetStats(self.cgroupManager, self.rootFs, self.pid, self.ignoreMetrics)
 | 
			
		||||
	stats, err := self.libcontainerHandler.GetStats()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return stats, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -232,7 +217,7 @@ func (self *containerdContainerHandler) ListContainers(listType container.ListTy
 | 
			
		||||
func (self *containerdContainerHandler) GetCgroupPath(resource string) (string, error) {
 | 
			
		||||
	path, ok := self.cgroupPaths[resource]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return "", fmt.Errorf("could not find path for resource %q for container %q\n", resource, self.name)
 | 
			
		||||
		return "", fmt.Errorf("could not find path for resource %q for container %q\n", resource, self.reference.Name)
 | 
			
		||||
	}
 | 
			
		||||
	return path, nil
 | 
			
		||||
}
 | 
			
		||||
@@ -242,7 +227,7 @@ func (self *containerdContainerHandler) GetContainerLabels() map[string]string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *containerdContainerHandler) ListProcesses(listType container.ListType) ([]int, error) {
 | 
			
		||||
	return containerlibcontainer.GetProcesses(self.cgroupManager)
 | 
			
		||||
	return self.libcontainerHandler.GetProcesses()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *containerdContainerHandler) Exists() bool {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/google/cadvisor/container/crio/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/google/cadvisor/container/crio/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -17,7 +17,6 @@ go_library(
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/info/v1:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/manager/watcher:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										75
									
								
								vendor/github.com/google/cadvisor/container/crio/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										75
									
								
								vendor/github.com/google/cadvisor/container/crio/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -21,7 +21,6 @@ import (
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/cadvisor/container"
 | 
			
		||||
	"github.com/google/cadvisor/container/common"
 | 
			
		||||
@@ -29,48 +28,32 @@ import (
 | 
			
		||||
	"github.com/google/cadvisor/fs"
 | 
			
		||||
	info "github.com/google/cadvisor/info/v1"
 | 
			
		||||
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer/cgroups"
 | 
			
		||||
	cgroupfs "github.com/opencontainers/runc/libcontainer/cgroups/fs"
 | 
			
		||||
	libcontainerconfigs "github.com/opencontainers/runc/libcontainer/configs"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type crioContainerHandler struct {
 | 
			
		||||
	name               string
 | 
			
		||||
	id                 string
 | 
			
		||||
	aliases            []string
 | 
			
		||||
	machineInfoFactory info.MachineInfoFactory
 | 
			
		||||
 | 
			
		||||
	// Absolute path to the cgroup hierarchies of this container.
 | 
			
		||||
	// (e.g.: "cpu" -> "/sys/fs/cgroup/cpu/test")
 | 
			
		||||
	cgroupPaths map[string]string
 | 
			
		||||
 | 
			
		||||
	// Manager of this container's cgroups.
 | 
			
		||||
	cgroupManager cgroups.Manager
 | 
			
		||||
 | 
			
		||||
	// the CRI-O storage driver
 | 
			
		||||
	storageDriver    storageDriver
 | 
			
		||||
	fsInfo           fs.FsInfo
 | 
			
		||||
	rootfsStorageDir string
 | 
			
		||||
 | 
			
		||||
	// Time at which this container was created.
 | 
			
		||||
	creationTime time.Time
 | 
			
		||||
 | 
			
		||||
	// Metadata associated with the container.
 | 
			
		||||
	labels map[string]string
 | 
			
		||||
	envs   map[string]string
 | 
			
		||||
	labels map[string]string
 | 
			
		||||
 | 
			
		||||
	// TODO
 | 
			
		||||
	// crio version handling...
 | 
			
		||||
 | 
			
		||||
	// The container PID used to switch namespaces as required
 | 
			
		||||
	pid int
 | 
			
		||||
 | 
			
		||||
	// Image name used for this container.
 | 
			
		||||
	image string
 | 
			
		||||
 | 
			
		||||
	// The host root FS to read
 | 
			
		||||
	rootFs string
 | 
			
		||||
 | 
			
		||||
	// The network mode of the container
 | 
			
		||||
	// TODO
 | 
			
		||||
 | 
			
		||||
@@ -84,6 +67,10 @@ type crioContainerHandler struct {
 | 
			
		||||
 | 
			
		||||
	// container restart count
 | 
			
		||||
	restartCount int
 | 
			
		||||
 | 
			
		||||
	reference info.ContainerReference
 | 
			
		||||
 | 
			
		||||
	libcontainerHandler *containerlibcontainer.Handler
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ container.ContainerHandler = &crioContainerHandler{}
 | 
			
		||||
@@ -150,25 +137,29 @@ func newCrioContainerHandler(
 | 
			
		||||
		rootfsStorageDir = filepath.Join(rootfsStorageDir, "diff")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: extract object mother method
 | 
			
		||||
	handler := &crioContainerHandler{
 | 
			
		||||
		id:                 id,
 | 
			
		||||
		name:               name,
 | 
			
		||||
		machineInfoFactory: machineInfoFactory,
 | 
			
		||||
		cgroupPaths:        cgroupPaths,
 | 
			
		||||
		cgroupManager:      cgroupManager,
 | 
			
		||||
		storageDriver:      storageDriver,
 | 
			
		||||
		fsInfo:             fsInfo,
 | 
			
		||||
		rootFs:             rootFs,
 | 
			
		||||
		rootfsStorageDir:   rootfsStorageDir,
 | 
			
		||||
		envs:               make(map[string]string),
 | 
			
		||||
		ignoreMetrics:      ignoreMetrics,
 | 
			
		||||
	containerReference := info.ContainerReference{
 | 
			
		||||
		Id:        id,
 | 
			
		||||
		Name:      name,
 | 
			
		||||
		Aliases:   []string{cInfo.Name, id},
 | 
			
		||||
		Namespace: CrioNamespace,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	libcontainerHandler := containerlibcontainer.NewHandler(cgroupManager, rootFs, cInfo.Pid, ignoreMetrics)
 | 
			
		||||
 | 
			
		||||
	// TODO: extract object mother method
 | 
			
		||||
	handler := &crioContainerHandler{
 | 
			
		||||
		machineInfoFactory:  machineInfoFactory,
 | 
			
		||||
		cgroupPaths:         cgroupPaths,
 | 
			
		||||
		storageDriver:       storageDriver,
 | 
			
		||||
		fsInfo:              fsInfo,
 | 
			
		||||
		rootfsStorageDir:    rootfsStorageDir,
 | 
			
		||||
		envs:                make(map[string]string),
 | 
			
		||||
		labels:              cInfo.Labels,
 | 
			
		||||
		ignoreMetrics:       ignoreMetrics,
 | 
			
		||||
		reference:           containerReference,
 | 
			
		||||
		libcontainerHandler: libcontainerHandler,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	handler.creationTime = time.Unix(0, cInfo.CreatedTime)
 | 
			
		||||
	handler.pid = cInfo.Pid
 | 
			
		||||
	handler.aliases = append(handler.aliases, cInfo.Name, id)
 | 
			
		||||
	handler.labels = cInfo.Labels
 | 
			
		||||
	handler.image = cInfo.Image
 | 
			
		||||
	// TODO: we wantd to know graph driver DeviceId (dont think this is needed now)
 | 
			
		||||
 | 
			
		||||
@@ -204,13 +195,7 @@ func (self *crioContainerHandler) Cleanup() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *crioContainerHandler) ContainerReference() (info.ContainerReference, error) {
 | 
			
		||||
	return info.ContainerReference{
 | 
			
		||||
		Id:        self.id,
 | 
			
		||||
		Name:      self.name,
 | 
			
		||||
		Aliases:   self.aliases,
 | 
			
		||||
		Namespace: CrioNamespace,
 | 
			
		||||
		Labels:    self.labels,
 | 
			
		||||
	}, nil
 | 
			
		||||
	return self.reference, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *crioContainerHandler) needNet() bool {
 | 
			
		||||
@@ -286,7 +271,7 @@ func (self *crioContainerHandler) getFsStats(stats *info.ContainerStats) error {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *crioContainerHandler) GetStats() (*info.ContainerStats, error) {
 | 
			
		||||
	stats, err := containerlibcontainer.GetStats(self.cgroupManager, self.rootFs, self.pid, self.ignoreMetrics)
 | 
			
		||||
	stats, err := self.libcontainerHandler.GetStats()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return stats, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -315,7 +300,7 @@ func (self *crioContainerHandler) ListContainers(listType container.ListType) ([
 | 
			
		||||
func (self *crioContainerHandler) GetCgroupPath(resource string) (string, error) {
 | 
			
		||||
	path, ok := self.cgroupPaths[resource]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return "", fmt.Errorf("could not find path for resource %q for container %q\n", resource, self.name)
 | 
			
		||||
		return "", fmt.Errorf("could not find path for resource %q for container %q\n", resource, self.reference.Name)
 | 
			
		||||
	}
 | 
			
		||||
	return path, nil
 | 
			
		||||
}
 | 
			
		||||
@@ -329,7 +314,7 @@ func (self *crioContainerHandler) GetContainerIPAddress() string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *crioContainerHandler) ListProcesses(listType container.ListType) ([]int, error) {
 | 
			
		||||
	return containerlibcontainer.GetProcesses(self.cgroupManager)
 | 
			
		||||
	return self.libcontainerHandler.GetProcesses()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *crioContainerHandler) Exists() bool {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/google/cadvisor/container/docker/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/google/cadvisor/container/docker/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -27,7 +27,6 @@ go_library(
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/manager/watcher:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/utils/docker:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/zfs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/net/context:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										106
									
								
								vendor/github.com/google/cadvisor/container/docker/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										106
									
								
								vendor/github.com/google/cadvisor/container/docker/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -35,7 +35,6 @@ import (
 | 
			
		||||
	dockercontainer "github.com/docker/docker/api/types/container"
 | 
			
		||||
	docker "github.com/docker/docker/client"
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer/cgroups"
 | 
			
		||||
	cgroupfs "github.com/opencontainers/runc/libcontainer/cgroups/fs"
 | 
			
		||||
	libcontainerconfigs "github.com/opencontainers/runc/libcontainer/configs"
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
@@ -52,53 +51,29 @@ const (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type dockerContainerHandler struct {
 | 
			
		||||
	client             *docker.Client
 | 
			
		||||
	name               string
 | 
			
		||||
	id                 string
 | 
			
		||||
	aliases            []string
 | 
			
		||||
 | 
			
		||||
	// machineInfoFactory provides info.MachineInfo
 | 
			
		||||
	machineInfoFactory info.MachineInfoFactory
 | 
			
		||||
 | 
			
		||||
	// Absolute path to the cgroup hierarchies of this container.
 | 
			
		||||
	// (e.g.: "cpu" -> "/sys/fs/cgroup/cpu/test")
 | 
			
		||||
	cgroupPaths map[string]string
 | 
			
		||||
 | 
			
		||||
	// Manager of this container's cgroups.
 | 
			
		||||
	cgroupManager cgroups.Manager
 | 
			
		||||
 | 
			
		||||
	// the docker storage driver
 | 
			
		||||
	storageDriver    storageDriver
 | 
			
		||||
	fsInfo           fs.FsInfo
 | 
			
		||||
	rootfsStorageDir string
 | 
			
		||||
 | 
			
		||||
	// devicemapper state
 | 
			
		||||
 | 
			
		||||
	// the devicemapper poolname
 | 
			
		||||
	poolName string
 | 
			
		||||
	// the devicemapper device id for the container
 | 
			
		||||
	deviceID string
 | 
			
		||||
 | 
			
		||||
	// zfs Filesystem
 | 
			
		||||
	zfsFilesystem string
 | 
			
		||||
 | 
			
		||||
	// zfsParent is the parent for docker zfs
 | 
			
		||||
	zfsParent string
 | 
			
		||||
 | 
			
		||||
	// Time at which this container was created.
 | 
			
		||||
	creationTime time.Time
 | 
			
		||||
 | 
			
		||||
	// Metadata associated with the container.
 | 
			
		||||
	labels map[string]string
 | 
			
		||||
	envs   map[string]string
 | 
			
		||||
 | 
			
		||||
	// The container PID used to switch namespaces as required
 | 
			
		||||
	pid int
 | 
			
		||||
	labels map[string]string
 | 
			
		||||
 | 
			
		||||
	// Image name used for this container.
 | 
			
		||||
	image string
 | 
			
		||||
 | 
			
		||||
	// The host root FS to read
 | 
			
		||||
	rootFs string
 | 
			
		||||
 | 
			
		||||
	// The network mode of the container
 | 
			
		||||
	networkMode dockercontainer.NetworkMode
 | 
			
		||||
 | 
			
		||||
@@ -110,14 +85,19 @@ type dockerContainerHandler struct {
 | 
			
		||||
 | 
			
		||||
	ignoreMetrics container.MetricSet
 | 
			
		||||
 | 
			
		||||
	// thin pool watcher
 | 
			
		||||
	thinPoolWatcher *devicemapper.ThinPoolWatcher
 | 
			
		||||
	// the devicemapper poolname
 | 
			
		||||
	poolName string
 | 
			
		||||
 | 
			
		||||
	// zfs watcher
 | 
			
		||||
	zfsWatcher *zfs.ZfsWatcher
 | 
			
		||||
	// zfsParent is the parent for docker zfs
 | 
			
		||||
	zfsParent string
 | 
			
		||||
 | 
			
		||||
	// container restart count
 | 
			
		||||
	restartCount int
 | 
			
		||||
 | 
			
		||||
	// Reference to the container
 | 
			
		||||
	reference info.ContainerReference
 | 
			
		||||
 | 
			
		||||
	libcontainerHandler *containerlibcontainer.Handler
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var _ container.ContainerHandler = &dockerContainerHandler{}
 | 
			
		||||
@@ -210,46 +190,42 @@ func newDockerContainerHandler(
 | 
			
		||||
		zfsFilesystem = path.Join(zfsParent, rwLayerID)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: extract object mother method
 | 
			
		||||
	handler := &dockerContainerHandler{
 | 
			
		||||
		id:                 id,
 | 
			
		||||
		client:             client,
 | 
			
		||||
		name:               name,
 | 
			
		||||
		machineInfoFactory: machineInfoFactory,
 | 
			
		||||
		cgroupPaths:        cgroupPaths,
 | 
			
		||||
		cgroupManager:      cgroupManager,
 | 
			
		||||
		storageDriver:      storageDriver,
 | 
			
		||||
		fsInfo:             fsInfo,
 | 
			
		||||
		rootFs:             rootFs,
 | 
			
		||||
		poolName:           thinPoolName,
 | 
			
		||||
		zfsFilesystem:      zfsFilesystem,
 | 
			
		||||
		rootfsStorageDir:   rootfsStorageDir,
 | 
			
		||||
		envs:               make(map[string]string),
 | 
			
		||||
		ignoreMetrics:      ignoreMetrics,
 | 
			
		||||
		thinPoolWatcher:    thinPoolWatcher,
 | 
			
		||||
		zfsWatcher:         zfsWatcher,
 | 
			
		||||
		zfsParent:          zfsParent,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// We assume that if Inspect fails then the container is not known to docker.
 | 
			
		||||
	ctnr, err := client.ContainerInspect(context.Background(), id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("failed to inspect container %q: %v", id, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: extract object mother method
 | 
			
		||||
	handler := &dockerContainerHandler{
 | 
			
		||||
		machineInfoFactory: machineInfoFactory,
 | 
			
		||||
		cgroupPaths:        cgroupPaths,
 | 
			
		||||
		fsInfo:             fsInfo,
 | 
			
		||||
		storageDriver:      storageDriver,
 | 
			
		||||
		poolName:           thinPoolName,
 | 
			
		||||
		rootfsStorageDir:   rootfsStorageDir,
 | 
			
		||||
		envs:               make(map[string]string),
 | 
			
		||||
		labels:             ctnr.Config.Labels,
 | 
			
		||||
		ignoreMetrics:      ignoreMetrics,
 | 
			
		||||
		zfsParent:          zfsParent,
 | 
			
		||||
	}
 | 
			
		||||
	// Timestamp returned by Docker is in time.RFC3339Nano format.
 | 
			
		||||
	handler.creationTime, err = time.Parse(time.RFC3339Nano, ctnr.Created)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		// This should not happen, report the error just in case
 | 
			
		||||
		return nil, fmt.Errorf("failed to parse the create timestamp %q for container %q: %v", ctnr.Created, id, err)
 | 
			
		||||
	}
 | 
			
		||||
	handler.pid = ctnr.State.Pid
 | 
			
		||||
	handler.libcontainerHandler = containerlibcontainer.NewHandler(cgroupManager, rootFs, ctnr.State.Pid, ignoreMetrics)
 | 
			
		||||
 | 
			
		||||
	// Add the name and bare ID as aliases of the container.
 | 
			
		||||
	handler.aliases = append(handler.aliases, strings.TrimPrefix(ctnr.Name, "/"), id)
 | 
			
		||||
	handler.labels = ctnr.Config.Labels
 | 
			
		||||
	handler.reference = info.ContainerReference{
 | 
			
		||||
		Id:        id,
 | 
			
		||||
		Name:      name,
 | 
			
		||||
		Aliases:   []string{strings.TrimPrefix(ctnr.Name, "/"), id},
 | 
			
		||||
		Namespace: DockerNamespace,
 | 
			
		||||
	}
 | 
			
		||||
	handler.image = ctnr.Config.Image
 | 
			
		||||
	handler.networkMode = ctnr.HostConfig.NetworkMode
 | 
			
		||||
	handler.deviceID = ctnr.GraphDriver.Data["DeviceId"]
 | 
			
		||||
	handler.restartCount = ctnr.RestartCount
 | 
			
		||||
 | 
			
		||||
	// Obtain the IP address for the contianer.
 | 
			
		||||
@@ -273,7 +249,7 @@ func newDockerContainerHandler(
 | 
			
		||||
			fsHandler:       common.NewFsHandler(common.DefaultPeriod, rootfsStorageDir, otherStorageDir, fsInfo),
 | 
			
		||||
			thinPoolWatcher: thinPoolWatcher,
 | 
			
		||||
			zfsWatcher:      zfsWatcher,
 | 
			
		||||
			deviceID:        handler.deviceID,
 | 
			
		||||
			deviceID:        ctnr.GraphDriver.Data["DeviceId"],
 | 
			
		||||
			zfsFilesystem:   zfsFilesystem,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -365,13 +341,7 @@ func (self *dockerContainerHandler) Cleanup() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *dockerContainerHandler) ContainerReference() (info.ContainerReference, error) {
 | 
			
		||||
	return info.ContainerReference{
 | 
			
		||||
		Id:        self.id,
 | 
			
		||||
		Name:      self.name,
 | 
			
		||||
		Aliases:   self.aliases,
 | 
			
		||||
		Namespace: DockerNamespace,
 | 
			
		||||
		Labels:    self.labels,
 | 
			
		||||
	}, nil
 | 
			
		||||
	return self.reference, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *dockerContainerHandler) needNet() bool {
 | 
			
		||||
@@ -455,7 +425,7 @@ func (self *dockerContainerHandler) getFsStats(stats *info.ContainerStats) error
 | 
			
		||||
 | 
			
		||||
// TODO(vmarmol): Get from libcontainer API instead of cgroup manager when we don't have to support older Dockers.
 | 
			
		||||
func (self *dockerContainerHandler) GetStats() (*info.ContainerStats, error) {
 | 
			
		||||
	stats, err := containerlibcontainer.GetStats(self.cgroupManager, self.rootFs, self.pid, self.ignoreMetrics)
 | 
			
		||||
	stats, err := self.libcontainerHandler.GetStats()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return stats, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -484,7 +454,7 @@ func (self *dockerContainerHandler) ListContainers(listType container.ListType)
 | 
			
		||||
func (self *dockerContainerHandler) GetCgroupPath(resource string) (string, error) {
 | 
			
		||||
	path, ok := self.cgroupPaths[resource]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return "", fmt.Errorf("could not find path for resource %q for container %q\n", resource, self.name)
 | 
			
		||||
		return "", fmt.Errorf("could not find path for resource %q for container %q\n", resource, self.reference.Name)
 | 
			
		||||
	}
 | 
			
		||||
	return path, nil
 | 
			
		||||
}
 | 
			
		||||
@@ -498,7 +468,7 @@ func (self *dockerContainerHandler) GetContainerIPAddress() string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *dockerContainerHandler) ListProcesses(listType container.ListType) ([]int, error) {
 | 
			
		||||
	return containerlibcontainer.GetProcesses(self.cgroupManager)
 | 
			
		||||
	return self.libcontainerHandler.GetProcesses()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *dockerContainerHandler) Exists() bool {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/google/cadvisor/container/factory.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/google/cadvisor/container/factory.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -42,6 +42,7 @@ type MetricKind string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	CpuUsageMetrics         MetricKind = "cpu"
 | 
			
		||||
	ProcessSchedulerMetrics MetricKind = "sched"
 | 
			
		||||
	PerCpuUsageMetrics      MetricKind = "percpu"
 | 
			
		||||
	MemoryUsageMetrics      MetricKind = "memory"
 | 
			
		||||
	CpuLoadMetrics          MetricKind = "cpuLoad"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								vendor/github.com/google/cadvisor/container/libcontainer/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								vendor/github.com/google/cadvisor/container/libcontainer/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -2,7 +2,10 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["helpers.go"],
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "handler.go",
 | 
			
		||||
        "helpers.go",
 | 
			
		||||
    ],
 | 
			
		||||
    cgo = True,
 | 
			
		||||
    importpath = "github.com/google/cadvisor/container/libcontainer",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										566
									
								
								vendor/github.com/google/cadvisor/container/libcontainer/handler.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										566
									
								
								vendor/github.com/google/cadvisor/container/libcontainer/handler.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,566 @@
 | 
			
		||||
// Copyright 2018 Google Inc. All Rights Reserved.
 | 
			
		||||
//
 | 
			
		||||
// Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
// you may not use this file except in compliance with the License.
 | 
			
		||||
// You may obtain a copy of the License at
 | 
			
		||||
//
 | 
			
		||||
//     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
//
 | 
			
		||||
// Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
// distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
// See the License for the specific language governing permissions and
 | 
			
		||||
// limitations under the License.
 | 
			
		||||
 | 
			
		||||
package libcontainer
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/cadvisor/container"
 | 
			
		||||
	info "github.com/google/cadvisor/info/v1"
 | 
			
		||||
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer/cgroups"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
*/
 | 
			
		||||
import "C"
 | 
			
		||||
 | 
			
		||||
type Handler struct {
 | 
			
		||||
	cgroupManager   cgroups.Manager
 | 
			
		||||
	rootFs          string
 | 
			
		||||
	pid             int
 | 
			
		||||
	ignoreMetrics   container.MetricSet
 | 
			
		||||
	pidMetricsCache map[int]*info.CpuSchedstat
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewHandler(cgroupManager cgroups.Manager, rootFs string, pid int, ignoreMetrics container.MetricSet) *Handler {
 | 
			
		||||
	return &Handler{
 | 
			
		||||
		cgroupManager:   cgroupManager,
 | 
			
		||||
		rootFs:          rootFs,
 | 
			
		||||
		pid:             pid,
 | 
			
		||||
		ignoreMetrics:   ignoreMetrics,
 | 
			
		||||
		pidMetricsCache: make(map[int]*info.CpuSchedstat),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get cgroup and networking stats of the specified container
 | 
			
		||||
func (h *Handler) GetStats() (*info.ContainerStats, error) {
 | 
			
		||||
	cgroupStats, err := h.cgroupManager.GetStats()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	libcontainerStats := &libcontainer.Stats{
 | 
			
		||||
		CgroupStats: cgroupStats,
 | 
			
		||||
	}
 | 
			
		||||
	withPerCPU := !h.ignoreMetrics.Has(container.PerCpuUsageMetrics)
 | 
			
		||||
	stats := newContainerStats(libcontainerStats, withPerCPU)
 | 
			
		||||
 | 
			
		||||
	if !h.ignoreMetrics.Has(container.ProcessSchedulerMetrics) {
 | 
			
		||||
		pids, err := h.cgroupManager.GetAllPids()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Could not get PIDs for container %d: %v", h.pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Cpu.Schedstat, err = schedulerStatsFromProcs(h.rootFs, pids, h.pidMetricsCache)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				glog.V(4).Infof("Unable to get Process Scheduler Stats: %v", err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// If we know the pid then get network stats from /proc/<pid>/net/dev
 | 
			
		||||
	if h.pid == 0 {
 | 
			
		||||
		return stats, nil
 | 
			
		||||
	}
 | 
			
		||||
	if !h.ignoreMetrics.Has(container.NetworkUsageMetrics) {
 | 
			
		||||
		netStats, err := networkStatsFromProc(h.rootFs, h.pid)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get network stats from pid %d: %v", h.pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Interfaces = append(stats.Network.Interfaces, netStats...)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !h.ignoreMetrics.Has(container.NetworkTcpUsageMetrics) {
 | 
			
		||||
		t, err := tcpStatsFromProc(h.rootFs, h.pid, "net/tcp")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get tcp stats from pid %d: %v", h.pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Tcp = t
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		t6, err := tcpStatsFromProc(h.rootFs, h.pid, "net/tcp6")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get tcp6 stats from pid %d: %v", h.pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Tcp6 = t6
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !h.ignoreMetrics.Has(container.NetworkUdpUsageMetrics) {
 | 
			
		||||
		u, err := udpStatsFromProc(h.rootFs, h.pid, "net/udp")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get udp stats from pid %d: %v", h.pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Udp = u
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		u6, err := udpStatsFromProc(h.rootFs, h.pid, "net/udp6")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get udp6 stats from pid %d: %v", h.pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Udp6 = u6
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// For backwards compatibility.
 | 
			
		||||
	if len(stats.Network.Interfaces) > 0 {
 | 
			
		||||
		stats.Network.InterfaceStats = stats.Network.Interfaces[0]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func schedulerStatsFromProcs(rootFs string, pids []int, pidMetricsCache map[int]*info.CpuSchedstat) (info.CpuSchedstat, error) {
 | 
			
		||||
	for _, pid := range pids {
 | 
			
		||||
		f, err := os.Open(path.Join(rootFs, "proc", strconv.Itoa(pid), "schedstat"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return info.CpuSchedstat{}, fmt.Errorf("couldn't open scheduler statistics for process %d: %v", pid, err)
 | 
			
		||||
		}
 | 
			
		||||
		defer f.Close()
 | 
			
		||||
		contents, err := ioutil.ReadAll(f)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return info.CpuSchedstat{}, fmt.Errorf("couldn't read scheduler statistics for process %d: %v", pid, err)
 | 
			
		||||
		}
 | 
			
		||||
		rawMetrics := bytes.Split(bytes.TrimRight(contents, "\n"), []byte(" "))
 | 
			
		||||
		if len(rawMetrics) != 3 {
 | 
			
		||||
			return info.CpuSchedstat{}, fmt.Errorf("unexpected number of metrics in schedstat file for process %d", pid)
 | 
			
		||||
		}
 | 
			
		||||
		cacheEntry, ok := pidMetricsCache[pid]
 | 
			
		||||
		if !ok {
 | 
			
		||||
			cacheEntry = &info.CpuSchedstat{}
 | 
			
		||||
			pidMetricsCache[pid] = cacheEntry
 | 
			
		||||
		}
 | 
			
		||||
		for i, rawMetric := range rawMetrics {
 | 
			
		||||
			metric, err := strconv.ParseUint(string(rawMetric), 10, 64)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return info.CpuSchedstat{}, fmt.Errorf("parsing error while reading scheduler statistics for process: %d: %v", pid, err)
 | 
			
		||||
			}
 | 
			
		||||
			switch i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				cacheEntry.RunTime = metric
 | 
			
		||||
			case 1:
 | 
			
		||||
				cacheEntry.RunqueueTime = metric
 | 
			
		||||
			case 2:
 | 
			
		||||
				cacheEntry.RunPeriods = metric
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	schedstats := info.CpuSchedstat{}
 | 
			
		||||
	for _, v := range pidMetricsCache {
 | 
			
		||||
		schedstats.RunPeriods += v.RunPeriods
 | 
			
		||||
		schedstats.RunqueueTime += v.RunqueueTime
 | 
			
		||||
		schedstats.RunTime += v.RunTime
 | 
			
		||||
	}
 | 
			
		||||
	return schedstats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func networkStatsFromProc(rootFs string, pid int) ([]info.InterfaceStats, error) {
 | 
			
		||||
	netStatsFile := path.Join(rootFs, "proc", strconv.Itoa(pid), "/net/dev")
 | 
			
		||||
 | 
			
		||||
	ifaceStats, err := scanInterfaceStats(netStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return []info.InterfaceStats{}, fmt.Errorf("couldn't read network stats: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ifaceStats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	ignoredDevicePrefixes = []string{"lo", "veth", "docker"}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func isIgnoredDevice(ifName string) bool {
 | 
			
		||||
	for _, prefix := range ignoredDevicePrefixes {
 | 
			
		||||
		if strings.HasPrefix(strings.ToLower(ifName), prefix) {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func scanInterfaceStats(netStatsFile string) ([]info.InterfaceStats, error) {
 | 
			
		||||
	file, err := os.Open(netStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("failure opening %s: %v", netStatsFile, err)
 | 
			
		||||
	}
 | 
			
		||||
	defer file.Close()
 | 
			
		||||
 | 
			
		||||
	scanner := bufio.NewScanner(file)
 | 
			
		||||
 | 
			
		||||
	// Discard header lines
 | 
			
		||||
	for i := 0; i < 2; i++ {
 | 
			
		||||
		if b := scanner.Scan(); !b {
 | 
			
		||||
			return nil, scanner.Err()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats := []info.InterfaceStats{}
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		line := scanner.Text()
 | 
			
		||||
		line = strings.Replace(line, ":", "", -1)
 | 
			
		||||
 | 
			
		||||
		fields := strings.Fields(line)
 | 
			
		||||
		// If the format of the  line is invalid then don't trust any of the stats
 | 
			
		||||
		// in this file.
 | 
			
		||||
		if len(fields) != 17 {
 | 
			
		||||
			return nil, fmt.Errorf("invalid interface stats line: %v", line)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		devName := fields[0]
 | 
			
		||||
		if isIgnoredDevice(devName) {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		i := info.InterfaceStats{
 | 
			
		||||
			Name: devName,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		statFields := append(fields[1:5], fields[9:13]...)
 | 
			
		||||
		statPointers := []*uint64{
 | 
			
		||||
			&i.RxBytes, &i.RxPackets, &i.RxErrors, &i.RxDropped,
 | 
			
		||||
			&i.TxBytes, &i.TxPackets, &i.TxErrors, &i.TxDropped,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err := setInterfaceStatValues(statFields, statPointers)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, fmt.Errorf("cannot parse interface stats (%v): %v", err, line)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		stats = append(stats, i)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setInterfaceStatValues(fields []string, pointers []*uint64) error {
 | 
			
		||||
	for i, v := range fields {
 | 
			
		||||
		val, err := strconv.ParseUint(v, 10, 64)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		*pointers[i] = val
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func tcpStatsFromProc(rootFs string, pid int, file string) (info.TcpStat, error) {
 | 
			
		||||
	tcpStatsFile := path.Join(rootFs, "proc", strconv.Itoa(pid), file)
 | 
			
		||||
 | 
			
		||||
	tcpStats, err := scanTcpStats(tcpStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return tcpStats, fmt.Errorf("couldn't read tcp stats: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return tcpStats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func scanTcpStats(tcpStatsFile string) (info.TcpStat, error) {
 | 
			
		||||
 | 
			
		||||
	var stats info.TcpStat
 | 
			
		||||
 | 
			
		||||
	data, err := ioutil.ReadFile(tcpStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return stats, fmt.Errorf("failure opening %s: %v", tcpStatsFile, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tcpStateMap := map[string]uint64{
 | 
			
		||||
		"01": 0, //ESTABLISHED
 | 
			
		||||
		"02": 0, //SYN_SENT
 | 
			
		||||
		"03": 0, //SYN_RECV
 | 
			
		||||
		"04": 0, //FIN_WAIT1
 | 
			
		||||
		"05": 0, //FIN_WAIT2
 | 
			
		||||
		"06": 0, //TIME_WAIT
 | 
			
		||||
		"07": 0, //CLOSE
 | 
			
		||||
		"08": 0, //CLOSE_WAIT
 | 
			
		||||
		"09": 0, //LAST_ACK
 | 
			
		||||
		"0A": 0, //LISTEN
 | 
			
		||||
		"0B": 0, //CLOSING
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	reader := strings.NewReader(string(data))
 | 
			
		||||
	scanner := bufio.NewScanner(reader)
 | 
			
		||||
 | 
			
		||||
	scanner.Split(bufio.ScanLines)
 | 
			
		||||
 | 
			
		||||
	// Discard header line
 | 
			
		||||
	if b := scanner.Scan(); !b {
 | 
			
		||||
		return stats, scanner.Err()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		line := scanner.Text()
 | 
			
		||||
 | 
			
		||||
		state := strings.Fields(line)
 | 
			
		||||
		// TCP state is the 4th field.
 | 
			
		||||
		// Format: sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt  uid timeout inode
 | 
			
		||||
		tcpState := state[3]
 | 
			
		||||
		_, ok := tcpStateMap[tcpState]
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return stats, fmt.Errorf("invalid TCP stats line: %v", line)
 | 
			
		||||
		}
 | 
			
		||||
		tcpStateMap[tcpState]++
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats = info.TcpStat{
 | 
			
		||||
		Established: tcpStateMap["01"],
 | 
			
		||||
		SynSent:     tcpStateMap["02"],
 | 
			
		||||
		SynRecv:     tcpStateMap["03"],
 | 
			
		||||
		FinWait1:    tcpStateMap["04"],
 | 
			
		||||
		FinWait2:    tcpStateMap["05"],
 | 
			
		||||
		TimeWait:    tcpStateMap["06"],
 | 
			
		||||
		Close:       tcpStateMap["07"],
 | 
			
		||||
		CloseWait:   tcpStateMap["08"],
 | 
			
		||||
		LastAck:     tcpStateMap["09"],
 | 
			
		||||
		Listen:      tcpStateMap["0A"],
 | 
			
		||||
		Closing:     tcpStateMap["0B"],
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func udpStatsFromProc(rootFs string, pid int, file string) (info.UdpStat, error) {
 | 
			
		||||
	var err error
 | 
			
		||||
	var udpStats info.UdpStat
 | 
			
		||||
 | 
			
		||||
	udpStatsFile := path.Join(rootFs, "proc", strconv.Itoa(pid), file)
 | 
			
		||||
 | 
			
		||||
	r, err := os.Open(udpStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return udpStats, fmt.Errorf("failure opening %s: %v", udpStatsFile, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	udpStats, err = scanUdpStats(r)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return udpStats, fmt.Errorf("couldn't read udp stats: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return udpStats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func scanUdpStats(r io.Reader) (info.UdpStat, error) {
 | 
			
		||||
	var stats info.UdpStat
 | 
			
		||||
 | 
			
		||||
	scanner := bufio.NewScanner(r)
 | 
			
		||||
	scanner.Split(bufio.ScanLines)
 | 
			
		||||
 | 
			
		||||
	// Discard header line
 | 
			
		||||
	if b := scanner.Scan(); !b {
 | 
			
		||||
		return stats, scanner.Err()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	listening := uint64(0)
 | 
			
		||||
	dropped := uint64(0)
 | 
			
		||||
	rxQueued := uint64(0)
 | 
			
		||||
	txQueued := uint64(0)
 | 
			
		||||
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		line := scanner.Text()
 | 
			
		||||
		// Format: sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt  uid timeout inode ref pointer drops
 | 
			
		||||
 | 
			
		||||
		listening++
 | 
			
		||||
 | 
			
		||||
		fs := strings.Fields(line)
 | 
			
		||||
		if len(fs) != 13 {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		rx, tx := uint64(0), uint64(0)
 | 
			
		||||
		fmt.Sscanf(fs[4], "%X:%X", &rx, &tx)
 | 
			
		||||
		rxQueued += rx
 | 
			
		||||
		txQueued += tx
 | 
			
		||||
 | 
			
		||||
		d, err := strconv.Atoi(string(fs[12]))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		dropped += uint64(d)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats = info.UdpStat{
 | 
			
		||||
		Listen:   listening,
 | 
			
		||||
		Dropped:  dropped,
 | 
			
		||||
		RxQueued: rxQueued,
 | 
			
		||||
		TxQueued: txQueued,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (h *Handler) GetProcesses() ([]int, error) {
 | 
			
		||||
	pids, err := h.cgroupManager.GetPids()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return pids, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func minUint32(x, y uint32) uint32 {
 | 
			
		||||
	if x < y {
 | 
			
		||||
		return x
 | 
			
		||||
	}
 | 
			
		||||
	return y
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// var to allow unit tests to stub it out
 | 
			
		||||
var numCpusFunc = getNumberOnlineCPUs
 | 
			
		||||
 | 
			
		||||
// Convert libcontainer stats to info.ContainerStats.
 | 
			
		||||
func setCpuStats(s *cgroups.Stats, ret *info.ContainerStats, withPerCPU bool) {
 | 
			
		||||
	ret.Cpu.Usage.User = s.CpuStats.CpuUsage.UsageInUsermode
 | 
			
		||||
	ret.Cpu.Usage.System = s.CpuStats.CpuUsage.UsageInKernelmode
 | 
			
		||||
	ret.Cpu.Usage.Total = s.CpuStats.CpuUsage.TotalUsage
 | 
			
		||||
	ret.Cpu.CFS.Periods = s.CpuStats.ThrottlingData.Periods
 | 
			
		||||
	ret.Cpu.CFS.ThrottledPeriods = s.CpuStats.ThrottlingData.ThrottledPeriods
 | 
			
		||||
	ret.Cpu.CFS.ThrottledTime = s.CpuStats.ThrottlingData.ThrottledTime
 | 
			
		||||
 | 
			
		||||
	if !withPerCPU {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if len(s.CpuStats.CpuUsage.PercpuUsage) == 0 {
 | 
			
		||||
		// libcontainer's 'GetStats' can leave 'PercpuUsage' nil if it skipped the
 | 
			
		||||
		// cpuacct subsystem.
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	numPossible := uint32(len(s.CpuStats.CpuUsage.PercpuUsage))
 | 
			
		||||
	// Note that as of https://patchwork.kernel.org/patch/8607101/ (kernel v4.7),
 | 
			
		||||
	// the percpu usage information includes extra zero values for all additional
 | 
			
		||||
	// possible CPUs. This is to allow statistic collection after CPU-hotplug.
 | 
			
		||||
	// We intentionally ignore these extra zeroes.
 | 
			
		||||
	numActual, err := numCpusFunc()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		glog.Errorf("unable to determine number of actual cpus; defaulting to maximum possible number: errno %v", err)
 | 
			
		||||
		numActual = numPossible
 | 
			
		||||
	}
 | 
			
		||||
	if numActual > numPossible {
 | 
			
		||||
		// The real number of cores should never be greater than the number of
 | 
			
		||||
		// datapoints reported in cpu usage.
 | 
			
		||||
		glog.Errorf("PercpuUsage had %v cpus, but the actual number is %v; ignoring extra CPUs", numPossible, numActual)
 | 
			
		||||
	}
 | 
			
		||||
	numActual = minUint32(numPossible, numActual)
 | 
			
		||||
	ret.Cpu.Usage.PerCpu = make([]uint64, numActual)
 | 
			
		||||
 | 
			
		||||
	for i := uint32(0); i < numActual; i++ {
 | 
			
		||||
		ret.Cpu.Usage.PerCpu[i] = s.CpuStats.CpuUsage.PercpuUsage[i]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Copied from
 | 
			
		||||
// https://github.com/moby/moby/blob/8b1adf55c2af329a4334f21d9444d6a169000c81/daemon/stats/collector_unix.go#L73
 | 
			
		||||
// Apache 2.0, Copyright Docker, Inc.
 | 
			
		||||
func getNumberOnlineCPUs() (uint32, error) {
 | 
			
		||||
	i, err := C.sysconf(C._SC_NPROCESSORS_ONLN)
 | 
			
		||||
	// According to POSIX - errno is undefined after successful
 | 
			
		||||
	// sysconf, and can be non-zero in several cases, so look for
 | 
			
		||||
	// error in returned value not in errno.
 | 
			
		||||
	// (https://sourceware.org/bugzilla/show_bug.cgi?id=21536)
 | 
			
		||||
	if i == -1 {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	return uint32(i), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setDiskIoStats(s *cgroups.Stats, ret *info.ContainerStats) {
 | 
			
		||||
	ret.DiskIo.IoServiceBytes = DiskStatsCopy(s.BlkioStats.IoServiceBytesRecursive)
 | 
			
		||||
	ret.DiskIo.IoServiced = DiskStatsCopy(s.BlkioStats.IoServicedRecursive)
 | 
			
		||||
	ret.DiskIo.IoQueued = DiskStatsCopy(s.BlkioStats.IoQueuedRecursive)
 | 
			
		||||
	ret.DiskIo.Sectors = DiskStatsCopy(s.BlkioStats.SectorsRecursive)
 | 
			
		||||
	ret.DiskIo.IoServiceTime = DiskStatsCopy(s.BlkioStats.IoServiceTimeRecursive)
 | 
			
		||||
	ret.DiskIo.IoWaitTime = DiskStatsCopy(s.BlkioStats.IoWaitTimeRecursive)
 | 
			
		||||
	ret.DiskIo.IoMerged = DiskStatsCopy(s.BlkioStats.IoMergedRecursive)
 | 
			
		||||
	ret.DiskIo.IoTime = DiskStatsCopy(s.BlkioStats.IoTimeRecursive)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setMemoryStats(s *cgroups.Stats, ret *info.ContainerStats) {
 | 
			
		||||
	ret.Memory.Usage = s.MemoryStats.Usage.Usage
 | 
			
		||||
	ret.Memory.MaxUsage = s.MemoryStats.Usage.MaxUsage
 | 
			
		||||
	ret.Memory.Failcnt = s.MemoryStats.Usage.Failcnt
 | 
			
		||||
	ret.Memory.Cache = s.MemoryStats.Stats["cache"]
 | 
			
		||||
 | 
			
		||||
	if s.MemoryStats.UseHierarchy {
 | 
			
		||||
		ret.Memory.RSS = s.MemoryStats.Stats["total_rss"]
 | 
			
		||||
		ret.Memory.Swap = s.MemoryStats.Stats["total_swap"]
 | 
			
		||||
	} else {
 | 
			
		||||
		ret.Memory.RSS = s.MemoryStats.Stats["rss"]
 | 
			
		||||
		ret.Memory.Swap = s.MemoryStats.Stats["swap"]
 | 
			
		||||
	}
 | 
			
		||||
	if v, ok := s.MemoryStats.Stats["pgfault"]; ok {
 | 
			
		||||
		ret.Memory.ContainerData.Pgfault = v
 | 
			
		||||
		ret.Memory.HierarchicalData.Pgfault = v
 | 
			
		||||
	}
 | 
			
		||||
	if v, ok := s.MemoryStats.Stats["pgmajfault"]; ok {
 | 
			
		||||
		ret.Memory.ContainerData.Pgmajfault = v
 | 
			
		||||
		ret.Memory.HierarchicalData.Pgmajfault = v
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	workingSet := ret.Memory.Usage
 | 
			
		||||
	if v, ok := s.MemoryStats.Stats["total_inactive_file"]; ok {
 | 
			
		||||
		if workingSet < v {
 | 
			
		||||
			workingSet = 0
 | 
			
		||||
		} else {
 | 
			
		||||
			workingSet -= v
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	ret.Memory.WorkingSet = workingSet
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setNetworkStats(libcontainerStats *libcontainer.Stats, ret *info.ContainerStats) {
 | 
			
		||||
	ret.Network.Interfaces = make([]info.InterfaceStats, len(libcontainerStats.Interfaces))
 | 
			
		||||
	for i := range libcontainerStats.Interfaces {
 | 
			
		||||
		ret.Network.Interfaces[i] = info.InterfaceStats{
 | 
			
		||||
			Name:      libcontainerStats.Interfaces[i].Name,
 | 
			
		||||
			RxBytes:   libcontainerStats.Interfaces[i].RxBytes,
 | 
			
		||||
			RxPackets: libcontainerStats.Interfaces[i].RxPackets,
 | 
			
		||||
			RxErrors:  libcontainerStats.Interfaces[i].RxErrors,
 | 
			
		||||
			RxDropped: libcontainerStats.Interfaces[i].RxDropped,
 | 
			
		||||
			TxBytes:   libcontainerStats.Interfaces[i].TxBytes,
 | 
			
		||||
			TxPackets: libcontainerStats.Interfaces[i].TxPackets,
 | 
			
		||||
			TxErrors:  libcontainerStats.Interfaces[i].TxErrors,
 | 
			
		||||
			TxDropped: libcontainerStats.Interfaces[i].TxDropped,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Add to base struct for backwards compatibility.
 | 
			
		||||
	if len(ret.Network.Interfaces) > 0 {
 | 
			
		||||
		ret.Network.InterfaceStats = ret.Network.Interfaces[0]
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newContainerStats(libcontainerStats *libcontainer.Stats, withPerCPU bool) *info.ContainerStats {
 | 
			
		||||
	ret := &info.ContainerStats{
 | 
			
		||||
		Timestamp: time.Now(),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if s := libcontainerStats.CgroupStats; s != nil {
 | 
			
		||||
		setCpuStats(s, ret, withPerCPU)
 | 
			
		||||
		setDiskIoStats(s, ret)
 | 
			
		||||
		setMemoryStats(s, ret)
 | 
			
		||||
	}
 | 
			
		||||
	if len(libcontainerStats.Interfaces) > 0 {
 | 
			
		||||
		setNetworkStats(libcontainerStats, ret)
 | 
			
		||||
	}
 | 
			
		||||
	return ret
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										467
									
								
								vendor/github.com/google/cadvisor/container/libcontainer/helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										467
									
								
								vendor/github.com/google/cadvisor/container/libcontainer/helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -15,29 +15,14 @@
 | 
			
		||||
package libcontainer
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/cadvisor/container"
 | 
			
		||||
	info "github.com/google/cadvisor/info/v1"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer/cgroups"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
*/
 | 
			
		||||
import "C"
 | 
			
		||||
 | 
			
		||||
type CgroupSubsystems struct {
 | 
			
		||||
	// Cgroup subsystem mounts.
 | 
			
		||||
	// e.g.: "/sys/fs/cgroup/cpu" -> ["cpu", "cpuacct"]
 | 
			
		||||
@@ -104,309 +89,6 @@ var supportedSubsystems map[string]struct{} = map[string]struct{}{
 | 
			
		||||
	"devices": {},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Get cgroup and networking stats of the specified container
 | 
			
		||||
func GetStats(cgroupManager cgroups.Manager, rootFs string, pid int, ignoreMetrics container.MetricSet) (*info.ContainerStats, error) {
 | 
			
		||||
	cgroupStats, err := cgroupManager.GetStats()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	libcontainerStats := &libcontainer.Stats{
 | 
			
		||||
		CgroupStats: cgroupStats,
 | 
			
		||||
	}
 | 
			
		||||
	withPerCPU := !ignoreMetrics.Has(container.PerCpuUsageMetrics)
 | 
			
		||||
	stats := newContainerStats(libcontainerStats, withPerCPU)
 | 
			
		||||
 | 
			
		||||
	// If we know the pid then get network stats from /proc/<pid>/net/dev
 | 
			
		||||
	if pid == 0 {
 | 
			
		||||
		return stats, nil
 | 
			
		||||
	}
 | 
			
		||||
	if !ignoreMetrics.Has(container.NetworkUsageMetrics) {
 | 
			
		||||
		netStats, err := networkStatsFromProc(rootFs, pid)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get network stats from pid %d: %v", pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Interfaces = append(stats.Network.Interfaces, netStats...)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !ignoreMetrics.Has(container.NetworkTcpUsageMetrics) {
 | 
			
		||||
		t, err := tcpStatsFromProc(rootFs, pid, "net/tcp")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get tcp stats from pid %d: %v", pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Tcp = t
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		t6, err := tcpStatsFromProc(rootFs, pid, "net/tcp6")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get tcp6 stats from pid %d: %v", pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Tcp6 = t6
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if !ignoreMetrics.Has(container.NetworkUdpUsageMetrics) {
 | 
			
		||||
		u, err := udpStatsFromProc(rootFs, pid, "net/udp")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get udp stats from pid %d: %v", pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Udp = u
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		u6, err := udpStatsFromProc(rootFs, pid, "net/udp6")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			glog.V(4).Infof("Unable to get udp6 stats from pid %d: %v", pid, err)
 | 
			
		||||
		} else {
 | 
			
		||||
			stats.Network.Udp6 = u6
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// For backwards compatibility.
 | 
			
		||||
	if len(stats.Network.Interfaces) > 0 {
 | 
			
		||||
		stats.Network.InterfaceStats = stats.Network.Interfaces[0]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func networkStatsFromProc(rootFs string, pid int) ([]info.InterfaceStats, error) {
 | 
			
		||||
	netStatsFile := path.Join(rootFs, "proc", strconv.Itoa(pid), "/net/dev")
 | 
			
		||||
 | 
			
		||||
	ifaceStats, err := scanInterfaceStats(netStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return []info.InterfaceStats{}, fmt.Errorf("couldn't read network stats: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return ifaceStats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	ignoredDevicePrefixes = []string{"lo", "veth", "docker"}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func isIgnoredDevice(ifName string) bool {
 | 
			
		||||
	for _, prefix := range ignoredDevicePrefixes {
 | 
			
		||||
		if strings.HasPrefix(strings.ToLower(ifName), prefix) {
 | 
			
		||||
			return true
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func scanInterfaceStats(netStatsFile string) ([]info.InterfaceStats, error) {
 | 
			
		||||
	file, err := os.Open(netStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, fmt.Errorf("failure opening %s: %v", netStatsFile, err)
 | 
			
		||||
	}
 | 
			
		||||
	defer file.Close()
 | 
			
		||||
 | 
			
		||||
	scanner := bufio.NewScanner(file)
 | 
			
		||||
 | 
			
		||||
	// Discard header lines
 | 
			
		||||
	for i := 0; i < 2; i++ {
 | 
			
		||||
		if b := scanner.Scan(); !b {
 | 
			
		||||
			return nil, scanner.Err()
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats := []info.InterfaceStats{}
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		line := scanner.Text()
 | 
			
		||||
		line = strings.Replace(line, ":", "", -1)
 | 
			
		||||
 | 
			
		||||
		fields := strings.Fields(line)
 | 
			
		||||
		// If the format of the  line is invalid then don't trust any of the stats
 | 
			
		||||
		// in this file.
 | 
			
		||||
		if len(fields) != 17 {
 | 
			
		||||
			return nil, fmt.Errorf("invalid interface stats line: %v", line)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		devName := fields[0]
 | 
			
		||||
		if isIgnoredDevice(devName) {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		i := info.InterfaceStats{
 | 
			
		||||
			Name: devName,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		statFields := append(fields[1:5], fields[9:13]...)
 | 
			
		||||
		statPointers := []*uint64{
 | 
			
		||||
			&i.RxBytes, &i.RxPackets, &i.RxErrors, &i.RxDropped,
 | 
			
		||||
			&i.TxBytes, &i.TxPackets, &i.TxErrors, &i.TxDropped,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err := setInterfaceStatValues(statFields, statPointers)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, fmt.Errorf("cannot parse interface stats (%v): %v", err, line)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		stats = append(stats, i)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setInterfaceStatValues(fields []string, pointers []*uint64) error {
 | 
			
		||||
	for i, v := range fields {
 | 
			
		||||
		val, err := strconv.ParseUint(v, 10, 64)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		*pointers[i] = val
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func tcpStatsFromProc(rootFs string, pid int, file string) (info.TcpStat, error) {
 | 
			
		||||
	tcpStatsFile := path.Join(rootFs, "proc", strconv.Itoa(pid), file)
 | 
			
		||||
 | 
			
		||||
	tcpStats, err := scanTcpStats(tcpStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return tcpStats, fmt.Errorf("couldn't read tcp stats: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return tcpStats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func scanTcpStats(tcpStatsFile string) (info.TcpStat, error) {
 | 
			
		||||
 | 
			
		||||
	var stats info.TcpStat
 | 
			
		||||
 | 
			
		||||
	data, err := ioutil.ReadFile(tcpStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return stats, fmt.Errorf("failure opening %s: %v", tcpStatsFile, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tcpStateMap := map[string]uint64{
 | 
			
		||||
		"01": 0, //ESTABLISHED
 | 
			
		||||
		"02": 0, //SYN_SENT
 | 
			
		||||
		"03": 0, //SYN_RECV
 | 
			
		||||
		"04": 0, //FIN_WAIT1
 | 
			
		||||
		"05": 0, //FIN_WAIT2
 | 
			
		||||
		"06": 0, //TIME_WAIT
 | 
			
		||||
		"07": 0, //CLOSE
 | 
			
		||||
		"08": 0, //CLOSE_WAIT
 | 
			
		||||
		"09": 0, //LAST_ACK
 | 
			
		||||
		"0A": 0, //LISTEN
 | 
			
		||||
		"0B": 0, //CLOSING
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	reader := strings.NewReader(string(data))
 | 
			
		||||
	scanner := bufio.NewScanner(reader)
 | 
			
		||||
 | 
			
		||||
	scanner.Split(bufio.ScanLines)
 | 
			
		||||
 | 
			
		||||
	// Discard header line
 | 
			
		||||
	if b := scanner.Scan(); !b {
 | 
			
		||||
		return stats, scanner.Err()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		line := scanner.Text()
 | 
			
		||||
 | 
			
		||||
		state := strings.Fields(line)
 | 
			
		||||
		// TCP state is the 4th field.
 | 
			
		||||
		// Format: sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt  uid timeout inode
 | 
			
		||||
		tcpState := state[3]
 | 
			
		||||
		_, ok := tcpStateMap[tcpState]
 | 
			
		||||
		if !ok {
 | 
			
		||||
			return stats, fmt.Errorf("invalid TCP stats line: %v", line)
 | 
			
		||||
		}
 | 
			
		||||
		tcpStateMap[tcpState]++
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats = info.TcpStat{
 | 
			
		||||
		Established: tcpStateMap["01"],
 | 
			
		||||
		SynSent:     tcpStateMap["02"],
 | 
			
		||||
		SynRecv:     tcpStateMap["03"],
 | 
			
		||||
		FinWait1:    tcpStateMap["04"],
 | 
			
		||||
		FinWait2:    tcpStateMap["05"],
 | 
			
		||||
		TimeWait:    tcpStateMap["06"],
 | 
			
		||||
		Close:       tcpStateMap["07"],
 | 
			
		||||
		CloseWait:   tcpStateMap["08"],
 | 
			
		||||
		LastAck:     tcpStateMap["09"],
 | 
			
		||||
		Listen:      tcpStateMap["0A"],
 | 
			
		||||
		Closing:     tcpStateMap["0B"],
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func udpStatsFromProc(rootFs string, pid int, file string) (info.UdpStat, error) {
 | 
			
		||||
	var err error
 | 
			
		||||
	var udpStats info.UdpStat
 | 
			
		||||
 | 
			
		||||
	udpStatsFile := path.Join(rootFs, "proc", strconv.Itoa(pid), file)
 | 
			
		||||
 | 
			
		||||
	r, err := os.Open(udpStatsFile)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return udpStats, fmt.Errorf("failure opening %s: %v", udpStatsFile, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	udpStats, err = scanUdpStats(r)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return udpStats, fmt.Errorf("couldn't read udp stats: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return udpStats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func scanUdpStats(r io.Reader) (info.UdpStat, error) {
 | 
			
		||||
	var stats info.UdpStat
 | 
			
		||||
 | 
			
		||||
	scanner := bufio.NewScanner(r)
 | 
			
		||||
	scanner.Split(bufio.ScanLines)
 | 
			
		||||
 | 
			
		||||
	// Discard header line
 | 
			
		||||
	if b := scanner.Scan(); !b {
 | 
			
		||||
		return stats, scanner.Err()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	listening := uint64(0)
 | 
			
		||||
	dropped := uint64(0)
 | 
			
		||||
	rxQueued := uint64(0)
 | 
			
		||||
	txQueued := uint64(0)
 | 
			
		||||
 | 
			
		||||
	for scanner.Scan() {
 | 
			
		||||
		line := scanner.Text()
 | 
			
		||||
		// Format: sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt  uid timeout inode ref pointer drops
 | 
			
		||||
 | 
			
		||||
		listening++
 | 
			
		||||
 | 
			
		||||
		fs := strings.Fields(line)
 | 
			
		||||
		if len(fs) != 13 {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		rx, tx := uint64(0), uint64(0)
 | 
			
		||||
		fmt.Sscanf(fs[4], "%X:%X", &rx, &tx)
 | 
			
		||||
		rxQueued += rx
 | 
			
		||||
		txQueued += tx
 | 
			
		||||
 | 
			
		||||
		d, err := strconv.Atoi(string(fs[12]))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
		dropped += uint64(d)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	stats = info.UdpStat{
 | 
			
		||||
		Listen:   listening,
 | 
			
		||||
		Dropped:  dropped,
 | 
			
		||||
		RxQueued: rxQueued,
 | 
			
		||||
		TxQueued: txQueued,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stats, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GetProcesses(cgroupManager cgroups.Manager) ([]int, error) {
 | 
			
		||||
	pids, err := cgroupManager.GetPids()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return pids, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DiskStatsCopy0(major, minor uint64) *info.PerDiskStats {
 | 
			
		||||
	disk := info.PerDiskStats{
 | 
			
		||||
		Major: major,
 | 
			
		||||
@@ -456,152 +138,3 @@ func DiskStatsCopy(blkio_stats []cgroups.BlkioStatEntry) (stat []info.PerDiskSta
 | 
			
		||||
	}
 | 
			
		||||
	return DiskStatsCopy1(disk_stat)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func minUint32(x, y uint32) uint32 {
 | 
			
		||||
	if x < y {
 | 
			
		||||
		return x
 | 
			
		||||
	}
 | 
			
		||||
	return y
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// var to allow unit tests to stub it out
 | 
			
		||||
var numCpusFunc = getNumberOnlineCPUs
 | 
			
		||||
 | 
			
		||||
// Convert libcontainer stats to info.ContainerStats.
 | 
			
		||||
func setCpuStats(s *cgroups.Stats, ret *info.ContainerStats, withPerCPU bool) {
 | 
			
		||||
	ret.Cpu.Usage.User = s.CpuStats.CpuUsage.UsageInUsermode
 | 
			
		||||
	ret.Cpu.Usage.System = s.CpuStats.CpuUsage.UsageInKernelmode
 | 
			
		||||
	ret.Cpu.Usage.Total = s.CpuStats.CpuUsage.TotalUsage
 | 
			
		||||
	ret.Cpu.CFS.Periods = s.CpuStats.ThrottlingData.Periods
 | 
			
		||||
	ret.Cpu.CFS.ThrottledPeriods = s.CpuStats.ThrottlingData.ThrottledPeriods
 | 
			
		||||
	ret.Cpu.CFS.ThrottledTime = s.CpuStats.ThrottlingData.ThrottledTime
 | 
			
		||||
 | 
			
		||||
	if !withPerCPU {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if len(s.CpuStats.CpuUsage.PercpuUsage) == 0 {
 | 
			
		||||
		// libcontainer's 'GetStats' can leave 'PercpuUsage' nil if it skipped the
 | 
			
		||||
		// cpuacct subsystem.
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	numPossible := uint32(len(s.CpuStats.CpuUsage.PercpuUsage))
 | 
			
		||||
	// Note that as of https://patchwork.kernel.org/patch/8607101/ (kernel v4.7),
 | 
			
		||||
	// the percpu usage information includes extra zero values for all additional
 | 
			
		||||
	// possible CPUs. This is to allow statistic collection after CPU-hotplug.
 | 
			
		||||
	// We intentionally ignore these extra zeroes.
 | 
			
		||||
	numActual, err := numCpusFunc()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		glog.Errorf("unable to determine number of actual cpus; defaulting to maximum possible number: errno %v", err)
 | 
			
		||||
		numActual = numPossible
 | 
			
		||||
	}
 | 
			
		||||
	if numActual > numPossible {
 | 
			
		||||
		// The real number of cores should never be greater than the number of
 | 
			
		||||
		// datapoints reported in cpu usage.
 | 
			
		||||
		glog.Errorf("PercpuUsage had %v cpus, but the actual number is %v; ignoring extra CPUs", numPossible, numActual)
 | 
			
		||||
	}
 | 
			
		||||
	numActual = minUint32(numPossible, numActual)
 | 
			
		||||
	ret.Cpu.Usage.PerCpu = make([]uint64, numActual)
 | 
			
		||||
 | 
			
		||||
	for i := uint32(0); i < numActual; i++ {
 | 
			
		||||
		ret.Cpu.Usage.PerCpu[i] = s.CpuStats.CpuUsage.PercpuUsage[i]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Copied from
 | 
			
		||||
// https://github.com/moby/moby/blob/8b1adf55c2af329a4334f21d9444d6a169000c81/daemon/stats/collector_unix.go#L73
 | 
			
		||||
// Apache 2.0, Copyright Docker, Inc.
 | 
			
		||||
func getNumberOnlineCPUs() (uint32, error) {
 | 
			
		||||
	i, err := C.sysconf(C._SC_NPROCESSORS_ONLN)
 | 
			
		||||
	// According to POSIX - errno is undefined after successful
 | 
			
		||||
	// sysconf, and can be non-zero in several cases, so look for
 | 
			
		||||
	// error in returned value not in errno.
 | 
			
		||||
	// (https://sourceware.org/bugzilla/show_bug.cgi?id=21536)
 | 
			
		||||
	if i == -1 {
 | 
			
		||||
		return 0, err
 | 
			
		||||
	}
 | 
			
		||||
	return uint32(i), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setDiskIoStats(s *cgroups.Stats, ret *info.ContainerStats) {
 | 
			
		||||
	ret.DiskIo.IoServiceBytes = DiskStatsCopy(s.BlkioStats.IoServiceBytesRecursive)
 | 
			
		||||
	ret.DiskIo.IoServiced = DiskStatsCopy(s.BlkioStats.IoServicedRecursive)
 | 
			
		||||
	ret.DiskIo.IoQueued = DiskStatsCopy(s.BlkioStats.IoQueuedRecursive)
 | 
			
		||||
	ret.DiskIo.Sectors = DiskStatsCopy(s.BlkioStats.SectorsRecursive)
 | 
			
		||||
	ret.DiskIo.IoServiceTime = DiskStatsCopy(s.BlkioStats.IoServiceTimeRecursive)
 | 
			
		||||
	ret.DiskIo.IoWaitTime = DiskStatsCopy(s.BlkioStats.IoWaitTimeRecursive)
 | 
			
		||||
	ret.DiskIo.IoMerged = DiskStatsCopy(s.BlkioStats.IoMergedRecursive)
 | 
			
		||||
	ret.DiskIo.IoTime = DiskStatsCopy(s.BlkioStats.IoTimeRecursive)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setMemoryStats(s *cgroups.Stats, ret *info.ContainerStats) {
 | 
			
		||||
	ret.Memory.Usage = s.MemoryStats.Usage.Usage
 | 
			
		||||
	ret.Memory.MaxUsage = s.MemoryStats.Usage.MaxUsage
 | 
			
		||||
	ret.Memory.Failcnt = s.MemoryStats.Usage.Failcnt
 | 
			
		||||
	ret.Memory.Cache = s.MemoryStats.Stats["cache"]
 | 
			
		||||
 | 
			
		||||
	if s.MemoryStats.UseHierarchy {
 | 
			
		||||
		ret.Memory.RSS = s.MemoryStats.Stats["total_rss"]
 | 
			
		||||
		ret.Memory.Swap = s.MemoryStats.Stats["total_swap"]
 | 
			
		||||
	} else {
 | 
			
		||||
		ret.Memory.RSS = s.MemoryStats.Stats["rss"]
 | 
			
		||||
		ret.Memory.Swap = s.MemoryStats.Stats["swap"]
 | 
			
		||||
	}
 | 
			
		||||
	if v, ok := s.MemoryStats.Stats["pgfault"]; ok {
 | 
			
		||||
		ret.Memory.ContainerData.Pgfault = v
 | 
			
		||||
		ret.Memory.HierarchicalData.Pgfault = v
 | 
			
		||||
	}
 | 
			
		||||
	if v, ok := s.MemoryStats.Stats["pgmajfault"]; ok {
 | 
			
		||||
		ret.Memory.ContainerData.Pgmajfault = v
 | 
			
		||||
		ret.Memory.HierarchicalData.Pgmajfault = v
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	workingSet := ret.Memory.Usage
 | 
			
		||||
	if v, ok := s.MemoryStats.Stats["total_inactive_file"]; ok {
 | 
			
		||||
		if workingSet < v {
 | 
			
		||||
			workingSet = 0
 | 
			
		||||
		} else {
 | 
			
		||||
			workingSet -= v
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	ret.Memory.WorkingSet = workingSet
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func setNetworkStats(libcontainerStats *libcontainer.Stats, ret *info.ContainerStats) {
 | 
			
		||||
	ret.Network.Interfaces = make([]info.InterfaceStats, len(libcontainerStats.Interfaces))
 | 
			
		||||
	for i := range libcontainerStats.Interfaces {
 | 
			
		||||
		ret.Network.Interfaces[i] = info.InterfaceStats{
 | 
			
		||||
			Name:      libcontainerStats.Interfaces[i].Name,
 | 
			
		||||
			RxBytes:   libcontainerStats.Interfaces[i].RxBytes,
 | 
			
		||||
			RxPackets: libcontainerStats.Interfaces[i].RxPackets,
 | 
			
		||||
			RxErrors:  libcontainerStats.Interfaces[i].RxErrors,
 | 
			
		||||
			RxDropped: libcontainerStats.Interfaces[i].RxDropped,
 | 
			
		||||
			TxBytes:   libcontainerStats.Interfaces[i].TxBytes,
 | 
			
		||||
			TxPackets: libcontainerStats.Interfaces[i].TxPackets,
 | 
			
		||||
			TxErrors:  libcontainerStats.Interfaces[i].TxErrors,
 | 
			
		||||
			TxDropped: libcontainerStats.Interfaces[i].TxDropped,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Add to base struct for backwards compatibility.
 | 
			
		||||
	if len(ret.Network.Interfaces) > 0 {
 | 
			
		||||
		ret.Network.InterfaceStats = ret.Network.Interfaces[0]
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newContainerStats(libcontainerStats *libcontainer.Stats, withPerCPU bool) *info.ContainerStats {
 | 
			
		||||
	ret := &info.ContainerStats{
 | 
			
		||||
		Timestamp: time.Now(),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if s := libcontainerStats.CgroupStats; s != nil {
 | 
			
		||||
		setCpuStats(s, ret, withPerCPU)
 | 
			
		||||
		setDiskIoStats(s, ret)
 | 
			
		||||
		setMemoryStats(s, ret)
 | 
			
		||||
	}
 | 
			
		||||
	if len(libcontainerStats.Interfaces) > 0 {
 | 
			
		||||
		setNetworkStats(libcontainerStats, ret)
 | 
			
		||||
	}
 | 
			
		||||
	return ret
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/google/cadvisor/container/raw/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/google/cadvisor/container/raw/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -17,7 +17,6 @@ go_library(
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/info/v1:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/machine:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/manager/watcher:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								vendor/github.com/google/cadvisor/container/raw/factory.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/google/cadvisor/container/raw/factory.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -40,8 +40,8 @@ type rawFactory struct {
 | 
			
		||||
	// Information about mounted filesystems.
 | 
			
		||||
	fsInfo fs.FsInfo
 | 
			
		||||
 | 
			
		||||
	// Watcher for inotify events.
 | 
			
		||||
	watcher *common.InotifyWatcher
 | 
			
		||||
	// Watcher for fsnotify events.
 | 
			
		||||
	watcher *common.FsnotifyWatcher
 | 
			
		||||
 | 
			
		||||
	// List of metrics to be ignored.
 | 
			
		||||
	ignoreMetrics map[container.MetricKind]struct{}
 | 
			
		||||
@@ -78,7 +78,7 @@ func Register(machineInfoFactory info.MachineInfoFactory, fsInfo fs.FsInfo, igno
 | 
			
		||||
		return fmt.Errorf("failed to find supported cgroup mounts for the raw factory")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	watcher, err := common.NewInotifyWatcher()
 | 
			
		||||
	watcher, err := common.NewFsnotifyWatcher()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								vendor/github.com/google/cadvisor/container/raw/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								vendor/github.com/google/cadvisor/container/raw/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -26,7 +26,6 @@ import (
 | 
			
		||||
	"github.com/google/cadvisor/machine"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer/cgroups"
 | 
			
		||||
	cgroupfs "github.com/opencontainers/runc/libcontainer/cgroups/fs"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer/configs"
 | 
			
		||||
)
 | 
			
		||||
@@ -34,32 +33,23 @@ import (
 | 
			
		||||
type rawContainerHandler struct {
 | 
			
		||||
	// Name of the container for this handler.
 | 
			
		||||
	name               string
 | 
			
		||||
	cgroupSubsystems   *libcontainer.CgroupSubsystems
 | 
			
		||||
	machineInfoFactory info.MachineInfoFactory
 | 
			
		||||
 | 
			
		||||
	// Absolute path to the cgroup hierarchies of this container.
 | 
			
		||||
	// (e.g.: "cpu" -> "/sys/fs/cgroup/cpu/test")
 | 
			
		||||
	cgroupPaths map[string]string
 | 
			
		||||
 | 
			
		||||
	// Manager of this container's cgroups.
 | 
			
		||||
	cgroupManager cgroups.Manager
 | 
			
		||||
 | 
			
		||||
	fsInfo         fs.FsInfo
 | 
			
		||||
	externalMounts []common.Mount
 | 
			
		||||
 | 
			
		||||
	rootFs string
 | 
			
		||||
 | 
			
		||||
	// Metrics to be ignored.
 | 
			
		||||
	ignoreMetrics container.MetricSet
 | 
			
		||||
 | 
			
		||||
	pid int
 | 
			
		||||
	libcontainerHandler *libcontainer.Handler
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func isRootCgroup(name string) bool {
 | 
			
		||||
	return name == "/"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newRawContainerHandler(name string, cgroupSubsystems *libcontainer.CgroupSubsystems, machineInfoFactory info.MachineInfoFactory, fsInfo fs.FsInfo, watcher *common.InotifyWatcher, rootFs string, ignoreMetrics container.MetricSet) (container.ContainerHandler, error) {
 | 
			
		||||
func newRawContainerHandler(name string, cgroupSubsystems *libcontainer.CgroupSubsystems, machineInfoFactory info.MachineInfoFactory, fsInfo fs.FsInfo, watcher *common.FsnotifyWatcher, rootFs string, ignoreMetrics container.MetricSet) (container.ContainerHandler, error) {
 | 
			
		||||
	cgroupPaths := common.MakeCgroupPaths(cgroupSubsystems.MountPoints, name)
 | 
			
		||||
 | 
			
		||||
	cHints, err := common.GetContainerHintsFromFile(*common.ArgContainerHints)
 | 
			
		||||
@@ -88,17 +78,15 @@ func newRawContainerHandler(name string, cgroupSubsystems *libcontainer.CgroupSu
 | 
			
		||||
		pid = 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	handler := libcontainer.NewHandler(cgroupManager, rootFs, pid, ignoreMetrics)
 | 
			
		||||
 | 
			
		||||
	return &rawContainerHandler{
 | 
			
		||||
		name:                name,
 | 
			
		||||
		cgroupSubsystems:   cgroupSubsystems,
 | 
			
		||||
		machineInfoFactory:  machineInfoFactory,
 | 
			
		||||
		cgroupPaths:         cgroupPaths,
 | 
			
		||||
		cgroupManager:      cgroupManager,
 | 
			
		||||
		fsInfo:              fsInfo,
 | 
			
		||||
		externalMounts:      externalMounts,
 | 
			
		||||
		rootFs:             rootFs,
 | 
			
		||||
		ignoreMetrics:      ignoreMetrics,
 | 
			
		||||
		pid:                pid,
 | 
			
		||||
		libcontainerHandler: handler,
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -231,7 +219,7 @@ func (self *rawContainerHandler) getFsStats(stats *info.ContainerStats) error {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *rawContainerHandler) GetStats() (*info.ContainerStats, error) {
 | 
			
		||||
	stats, err := libcontainer.GetStats(self.cgroupManager, self.rootFs, self.pid, self.ignoreMetrics)
 | 
			
		||||
	stats, err := self.libcontainerHandler.GetStats()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return stats, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -267,7 +255,7 @@ func (self *rawContainerHandler) ListContainers(listType container.ListType) ([]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *rawContainerHandler) ListProcesses(listType container.ListType) ([]int, error) {
 | 
			
		||||
	return libcontainer.GetProcesses(self.cgroupManager)
 | 
			
		||||
	return self.libcontainerHandler.GetProcesses()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *rawContainerHandler) Exists() bool {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/google/cadvisor/container/rkt/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/google/cadvisor/container/rkt/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -20,7 +20,6 @@ go_library(
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/info/v1:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/manager/watcher:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/cgroups/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/opencontainers/runc/libcontainer/configs:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/net/context:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										65
									
								
								vendor/github.com/google/cadvisor/container/rkt/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										65
									
								
								vendor/github.com/google/cadvisor/container/rkt/handler.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -28,48 +28,35 @@ import (
 | 
			
		||||
	"golang.org/x/net/context"
 | 
			
		||||
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer/cgroups"
 | 
			
		||||
	cgroupfs "github.com/opencontainers/runc/libcontainer/cgroups/fs"
 | 
			
		||||
	"github.com/opencontainers/runc/libcontainer/configs"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type rktContainerHandler struct {
 | 
			
		||||
	rktClient rktapi.PublicAPIClient
 | 
			
		||||
	// Name of the container for this handler.
 | 
			
		||||
	name               string
 | 
			
		||||
	cgroupSubsystems   *libcontainer.CgroupSubsystems
 | 
			
		||||
	machineInfoFactory info.MachineInfoFactory
 | 
			
		||||
 | 
			
		||||
	// Absolute path to the cgroup hierarchies of this container.
 | 
			
		||||
	// (e.g.: "cpu" -> "/sys/fs/cgroup/cpu/test")
 | 
			
		||||
	cgroupPaths map[string]string
 | 
			
		||||
 | 
			
		||||
	// Manager of this container's cgroups.
 | 
			
		||||
	cgroupManager cgroups.Manager
 | 
			
		||||
 | 
			
		||||
	// Whether this container has network isolation enabled.
 | 
			
		||||
	hasNetwork bool
 | 
			
		||||
 | 
			
		||||
	fsInfo fs.FsInfo
 | 
			
		||||
 | 
			
		||||
	rootFs string
 | 
			
		||||
 | 
			
		||||
	isPod bool
 | 
			
		||||
 | 
			
		||||
	aliases []string
 | 
			
		||||
 | 
			
		||||
	pid int
 | 
			
		||||
 | 
			
		||||
	rootfsStorageDir string
 | 
			
		||||
 | 
			
		||||
	labels map[string]string
 | 
			
		||||
 | 
			
		||||
	// Filesystem handler.
 | 
			
		||||
	fsHandler common.FsHandler
 | 
			
		||||
 | 
			
		||||
	ignoreMetrics container.MetricSet
 | 
			
		||||
 | 
			
		||||
	apiPod *rktapi.Pod
 | 
			
		||||
 | 
			
		||||
	labels map[string]string
 | 
			
		||||
 | 
			
		||||
	reference info.ContainerReference
 | 
			
		||||
 | 
			
		||||
	libcontainerHandler *libcontainer.Handler
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newRktContainerHandler(name string, rktClient rktapi.PublicAPIClient, rktPath string, cgroupSubsystems *libcontainer.CgroupSubsystems, machineInfoFactory info.MachineInfoFactory, fsInfo fs.FsInfo, rootFs string, ignoreMetrics container.MetricSet) (container.ContainerHandler, error) {
 | 
			
		||||
@@ -122,30 +109,27 @@ func newRktContainerHandler(name string, rktClient rktapi.PublicAPIClient, rktPa
 | 
			
		||||
		Paths: cgroupPaths,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	hasNetwork := false
 | 
			
		||||
	if isPod {
 | 
			
		||||
		hasNetwork = true
 | 
			
		||||
	}
 | 
			
		||||
	libcontainerHandler := libcontainer.NewHandler(cgroupManager, rootFs, pid, ignoreMetrics)
 | 
			
		||||
 | 
			
		||||
	rootfsStorageDir := getRootFs(rktPath, parsed)
 | 
			
		||||
 | 
			
		||||
	containerReference := info.ContainerReference{
 | 
			
		||||
		Name:      name,
 | 
			
		||||
		Aliases:   aliases,
 | 
			
		||||
		Namespace: RktNamespace,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	handler := &rktContainerHandler{
 | 
			
		||||
		name:               name,
 | 
			
		||||
		rktClient:          rktClient,
 | 
			
		||||
		cgroupSubsystems:   cgroupSubsystems,
 | 
			
		||||
		machineInfoFactory:  machineInfoFactory,
 | 
			
		||||
		cgroupPaths:         cgroupPaths,
 | 
			
		||||
		cgroupManager:      cgroupManager,
 | 
			
		||||
		fsInfo:              fsInfo,
 | 
			
		||||
		hasNetwork:         hasNetwork,
 | 
			
		||||
		rootFs:             rootFs,
 | 
			
		||||
		isPod:               isPod,
 | 
			
		||||
		aliases:            aliases,
 | 
			
		||||
		pid:                pid,
 | 
			
		||||
		labels:             labels,
 | 
			
		||||
		rootfsStorageDir:    rootfsStorageDir,
 | 
			
		||||
		ignoreMetrics:       ignoreMetrics,
 | 
			
		||||
		apiPod:              apiPod,
 | 
			
		||||
		labels:              labels,
 | 
			
		||||
		reference:           containerReference,
 | 
			
		||||
		libcontainerHandler: libcontainerHandler,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if !ignoreMetrics.Has(container.DiskUsageMetrics) {
 | 
			
		||||
@@ -174,12 +158,7 @@ func createLabels(annotations []*rktapi.KeyValue) map[string]string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (handler *rktContainerHandler) ContainerReference() (info.ContainerReference, error) {
 | 
			
		||||
	return info.ContainerReference{
 | 
			
		||||
		Name:      handler.name,
 | 
			
		||||
		Aliases:   handler.aliases,
 | 
			
		||||
		Namespace: RktNamespace,
 | 
			
		||||
		Labels:    handler.labels,
 | 
			
		||||
	}, nil
 | 
			
		||||
	return handler.reference, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (handler *rktContainerHandler) Start() {
 | 
			
		||||
@@ -191,7 +170,7 @@ func (handler *rktContainerHandler) Cleanup() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (handler *rktContainerHandler) GetSpec() (info.ContainerSpec, error) {
 | 
			
		||||
	hasNetwork := handler.hasNetwork && !handler.ignoreMetrics.Has(container.NetworkUsageMetrics)
 | 
			
		||||
	hasNetwork := handler.isPod && !handler.ignoreMetrics.Has(container.NetworkUsageMetrics)
 | 
			
		||||
	hasFilesystem := !handler.ignoreMetrics.Has(container.DiskUsageMetrics)
 | 
			
		||||
 | 
			
		||||
	spec, err := common.GetSpec(handler.cgroupPaths, handler.machineInfoFactory, hasNetwork, hasFilesystem)
 | 
			
		||||
@@ -243,7 +222,7 @@ func (handler *rktContainerHandler) getFsStats(stats *info.ContainerStats) error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (handler *rktContainerHandler) GetStats() (*info.ContainerStats, error) {
 | 
			
		||||
	stats, err := libcontainer.GetStats(handler.cgroupManager, handler.rootFs, handler.pid, handler.ignoreMetrics)
 | 
			
		||||
	stats, err := handler.libcontainerHandler.GetStats()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return stats, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -275,7 +254,7 @@ func (self *rktContainerHandler) GetContainerIPAddress() string {
 | 
			
		||||
func (handler *rktContainerHandler) GetCgroupPath(resource string) (string, error) {
 | 
			
		||||
	path, ok := handler.cgroupPaths[resource]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return "", fmt.Errorf("could not find path for resource %q for container %q\n", resource, handler.name)
 | 
			
		||||
		return "", fmt.Errorf("could not find path for resource %q for container %q\n", resource, handler.reference.Name)
 | 
			
		||||
	}
 | 
			
		||||
	return path, nil
 | 
			
		||||
}
 | 
			
		||||
@@ -285,11 +264,11 @@ func (handler *rktContainerHandler) GetContainerLabels() map[string]string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (handler *rktContainerHandler) ListContainers(listType container.ListType) ([]info.ContainerReference, error) {
 | 
			
		||||
	return common.ListContainers(handler.name, handler.cgroupPaths, listType)
 | 
			
		||||
	return common.ListContainers(handler.reference.Name, handler.cgroupPaths, listType)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (handler *rktContainerHandler) ListProcesses(listType container.ListType) ([]int, error) {
 | 
			
		||||
	return libcontainer.GetProcesses(handler.cgroupManager)
 | 
			
		||||
	return handler.libcontainerHandler.GetProcesses()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (handler *rktContainerHandler) Exists() bool {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								vendor/github.com/google/cadvisor/fs/fs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/google/cadvisor/fs/fs.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -554,7 +554,7 @@ func GetDirDiskUsage(dir string, timeout time.Duration) (uint64, error) {
 | 
			
		||||
	if dir == "" {
 | 
			
		||||
		return 0, fmt.Errorf("invalid directory")
 | 
			
		||||
	}
 | 
			
		||||
	cmd := exec.Command("nice", "-n", "19", "du", "-s", dir)
 | 
			
		||||
	cmd := exec.Command("ionice", "-c3", "nice", "-n", "19", "du", "-s", dir)
 | 
			
		||||
	stdoutp, err := cmd.StdoutPipe()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return 0, fmt.Errorf("failed to setup stdout for cmd %v - %v", cmd.Args, err)
 | 
			
		||||
@@ -601,7 +601,7 @@ func GetDirInodeUsage(dir string, timeout time.Duration) (uint64, error) {
 | 
			
		||||
	}
 | 
			
		||||
	var counter byteCounter
 | 
			
		||||
	var stderr bytes.Buffer
 | 
			
		||||
	findCmd := exec.Command("find", dir, "-xdev", "-printf", ".")
 | 
			
		||||
	findCmd := exec.Command("ionice", "-c3", "nice", "-n", "19", "find", dir, "-xdev", "-printf", ".")
 | 
			
		||||
	findCmd.Stdout, findCmd.Stderr = &counter, &stderr
 | 
			
		||||
	if err := findCmd.Start(); err != nil {
 | 
			
		||||
		return 0, fmt.Errorf("failed to exec cmd %v - %v; stderr: %v", findCmd.Args, err, stderr.String())
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								vendor/github.com/google/cadvisor/info/v1/container.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								vendor/github.com/google/cadvisor/info/v1/container.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -85,8 +85,6 @@ type ContainerReference struct {
 | 
			
		||||
	// Namespace under which the aliases of a container are unique.
 | 
			
		||||
	// An example of a namespace is "docker" for Docker containers.
 | 
			
		||||
	Namespace string `json:"namespace,omitempty"`
 | 
			
		||||
 | 
			
		||||
	Labels map[string]string `json:"labels,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Sorts by container name.
 | 
			
		||||
@@ -295,10 +293,23 @@ type CpuCFS struct {
 | 
			
		||||
	ThrottledTime uint64 `json:"throttled_time"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Cpu Aggregated scheduler statistics
 | 
			
		||||
type CpuSchedstat struct {
 | 
			
		||||
	// https://www.kernel.org/doc/Documentation/scheduler/sched-stats.txt
 | 
			
		||||
 | 
			
		||||
	// time spent on the cpu
 | 
			
		||||
	RunTime uint64 `json:"run_time"`
 | 
			
		||||
	// time spent waiting on a runqueue
 | 
			
		||||
	RunqueueTime uint64 `json:"runqueue_time"`
 | 
			
		||||
	// # of timeslices run on this cpu
 | 
			
		||||
	RunPeriods uint64 `json:"run_periods"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// All CPU usage metrics are cumulative from the creation of the container
 | 
			
		||||
type CpuStats struct {
 | 
			
		||||
	Usage     CpuUsage     `json:"usage"`
 | 
			
		||||
	CFS       CpuCFS       `json:"cfs"`
 | 
			
		||||
	Schedstat CpuSchedstat `json:"schedstat"`
 | 
			
		||||
	// Smoothed average of number of runnable threads x 1000.
 | 
			
		||||
	// We multiply by thousand to avoid using floats, but preserving precision.
 | 
			
		||||
	// Load is smoothed over the last 10 seconds. Instantaneous value can be read
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								vendor/github.com/google/cadvisor/machine/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/github.com/google/cadvisor/machine/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -9,6 +9,7 @@ go_library(
 | 
			
		||||
    importpath = "github.com/google/cadvisor/machine",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/docker/docker/pkg/parsers/operatingsystem:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/fs:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/info/v1:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								vendor/github.com/google/cadvisor/machine/info.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/google/cadvisor/machine/info.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -23,6 +23,7 @@ import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"github.com/docker/docker/pkg/parsers/operatingsystem"
 | 
			
		||||
	"github.com/google/cadvisor/fs"
 | 
			
		||||
	info "github.com/google/cadvisor/info/v1"
 | 
			
		||||
	"github.com/google/cadvisor/utils/cloudinfo"
 | 
			
		||||
@@ -173,20 +174,11 @@ func Info(sysFs sysfs.SysFs, fsInfo fs.FsInfo, inHostNamespace bool) (*info.Mach
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func ContainerOsVersion() string {
 | 
			
		||||
	container_os := "Unknown"
 | 
			
		||||
	os_release, err := ioutil.ReadFile("/etc/os-release")
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		// We might be running in a busybox or some hand-crafted image.
 | 
			
		||||
		// It's useful to know why cadvisor didn't come up.
 | 
			
		||||
		for _, line := range strings.Split(string(os_release), "\n") {
 | 
			
		||||
			parsed := strings.Split(line, "\"")
 | 
			
		||||
			if len(parsed) == 3 && parsed[0] == "PRETTY_NAME=" {
 | 
			
		||||
				container_os = parsed[1]
 | 
			
		||||
				break
 | 
			
		||||
	os, err := operatingsystem.GetOperatingSystem()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		os = "Unknown"
 | 
			
		||||
	}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return container_os
 | 
			
		||||
	return os
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func KernelVersion() string {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								vendor/github.com/google/cadvisor/manager/container.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/google/cadvisor/manager/container.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -615,7 +615,12 @@ func (c *containerData) updateStats() error {
 | 
			
		||||
		}
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	err = c.memoryCache.AddStats(ref, stats)
 | 
			
		||||
 | 
			
		||||
	cInfo := info.ContainerInfo{
 | 
			
		||||
		ContainerReference: ref,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err = c.memoryCache.AddStats(&cInfo, stats)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/google/cadvisor/manager/manager.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/cadvisor/manager/manager.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -242,7 +242,7 @@ func retryDockerStatus() info.DockerStatus {
 | 
			
		||||
	for {
 | 
			
		||||
		ctx, _ := context.WithTimeout(context.Background(), startupTimeout)
 | 
			
		||||
		dockerStatus, err := docker.StatusWithContext(ctx)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			return dockerStatus
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/google/cadvisor/manager/watcher/raw/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/cadvisor/manager/watcher/raw/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -6,11 +6,11 @@ go_library(
 | 
			
		||||
    importpath = "github.com/google/cadvisor/manager/watcher/raw",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//vendor/github.com/fsnotify/fsnotify:go_default_library",
 | 
			
		||||
        "//vendor/github.com/golang/glog:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/container/common:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/container/libcontainer:go_default_library",
 | 
			
		||||
        "//vendor/github.com/google/cadvisor/manager/watcher:go_default_library",
 | 
			
		||||
        "//vendor/golang.org/x/exp/inotify:go_default_library",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										41
									
								
								vendor/github.com/google/cadvisor/manager/watcher/raw/raw.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										41
									
								
								vendor/github.com/google/cadvisor/manager/watcher/raw/raw.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -27,8 +27,8 @@ import (
 | 
			
		||||
	"github.com/google/cadvisor/container/libcontainer"
 | 
			
		||||
	"github.com/google/cadvisor/manager/watcher"
 | 
			
		||||
 | 
			
		||||
	"github.com/fsnotify/fsnotify"
 | 
			
		||||
	"github.com/golang/glog"
 | 
			
		||||
	"golang.org/x/exp/inotify"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type rawContainerWatcher struct {
 | 
			
		||||
@@ -37,8 +37,8 @@ type rawContainerWatcher struct {
 | 
			
		||||
 | 
			
		||||
	cgroupSubsystems *libcontainer.CgroupSubsystems
 | 
			
		||||
 | 
			
		||||
	// Inotify event watcher.
 | 
			
		||||
	watcher *common.InotifyWatcher
 | 
			
		||||
	// Fsnotify event watcher.
 | 
			
		||||
	watcher *common.FsnotifyWatcher
 | 
			
		||||
 | 
			
		||||
	// Signal for watcher thread to stop.
 | 
			
		||||
	stopWatcher chan error
 | 
			
		||||
@@ -53,7 +53,7 @@ func NewRawContainerWatcher() (watcher.ContainerWatcher, error) {
 | 
			
		||||
		return nil, fmt.Errorf("failed to find supported cgroup mounts for the raw factory")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	watcher, err := common.NewInotifyWatcher()
 | 
			
		||||
	watcher, err := common.NewFsnotifyWatcher()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@@ -71,7 +71,7 @@ func NewRawContainerWatcher() (watcher.ContainerWatcher, error) {
 | 
			
		||||
func (self *rawContainerWatcher) Start(events chan watcher.ContainerEvent) error {
 | 
			
		||||
	// Watch this container (all its cgroups) and all subdirectories.
 | 
			
		||||
	for _, cgroupPath := range self.cgroupPaths {
 | 
			
		||||
		_, err := self.watchDirectory(cgroupPath, "/")
 | 
			
		||||
		_, err := self.watchDirectory(events, cgroupPath, "/")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
@@ -109,7 +109,7 @@ func (self *rawContainerWatcher) Stop() error {
 | 
			
		||||
 | 
			
		||||
// Watches the specified directory and all subdirectories. Returns whether the path was
 | 
			
		||||
// already being watched and an error (if any).
 | 
			
		||||
func (self *rawContainerWatcher) watchDirectory(dir string, containerName string) (bool, error) {
 | 
			
		||||
func (self *rawContainerWatcher) watchDirectory(events chan watcher.ContainerEvent, dir string, containerName string) (bool, error) {
 | 
			
		||||
	alreadyWatching, err := self.watcher.AddWatch(containerName, dir)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return alreadyWatching, err
 | 
			
		||||
@@ -121,7 +121,7 @@ func (self *rawContainerWatcher) watchDirectory(dir string, containerName string
 | 
			
		||||
		if cleanup {
 | 
			
		||||
			_, err := self.watcher.RemoveWatch(containerName, dir)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				glog.Warningf("Failed to remove inotify watch for %q: %v", dir, err)
 | 
			
		||||
				glog.Warningf("Failed to remove fsnotify watch for %q: %v", dir, err)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
@@ -135,7 +135,8 @@ func (self *rawContainerWatcher) watchDirectory(dir string, containerName string
 | 
			
		||||
	for _, entry := range entries {
 | 
			
		||||
		if entry.IsDir() {
 | 
			
		||||
			entryPath := path.Join(dir, entry.Name())
 | 
			
		||||
			_, err = self.watchDirectory(entryPath, path.Join(containerName, entry.Name()))
 | 
			
		||||
			subcontainerName := path.Join(containerName, entry.Name())
 | 
			
		||||
			alreadyWatchingSubDir, err := self.watchDirectory(events, entryPath, subcontainerName)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				glog.Errorf("Failed to watch directory %q: %v", entryPath, err)
 | 
			
		||||
				if os.IsNotExist(err) {
 | 
			
		||||
@@ -145,6 +146,16 @@ func (self *rawContainerWatcher) watchDirectory(dir string, containerName string
 | 
			
		||||
				}
 | 
			
		||||
				return alreadyWatching, err
 | 
			
		||||
			}
 | 
			
		||||
			// since we already missed the creation event for this directory, publish an event here.
 | 
			
		||||
			if !alreadyWatchingSubDir {
 | 
			
		||||
				go func() {
 | 
			
		||||
					events <- watcher.ContainerEvent{
 | 
			
		||||
						EventType:   watcher.ContainerAdd,
 | 
			
		||||
						Name:        subcontainerName,
 | 
			
		||||
						WatchSource: watcher.Raw,
 | 
			
		||||
					}
 | 
			
		||||
				}()
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -152,18 +163,16 @@ func (self *rawContainerWatcher) watchDirectory(dir string, containerName string
 | 
			
		||||
	return alreadyWatching, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (self *rawContainerWatcher) processEvent(event *inotify.Event, events chan watcher.ContainerEvent) error {
 | 
			
		||||
	// Convert the inotify event type to a container create or delete.
 | 
			
		||||
func (self *rawContainerWatcher) processEvent(event fsnotify.Event, events chan watcher.ContainerEvent) error {
 | 
			
		||||
	// Convert the fsnotify event type to a container create or delete.
 | 
			
		||||
	var eventType watcher.ContainerEventType
 | 
			
		||||
	switch {
 | 
			
		||||
	case (event.Mask & inotify.IN_CREATE) > 0:
 | 
			
		||||
	case event.Op == fsnotify.Create:
 | 
			
		||||
		eventType = watcher.ContainerAdd
 | 
			
		||||
	case (event.Mask & inotify.IN_DELETE) > 0:
 | 
			
		||||
	case event.Op == fsnotify.Remove:
 | 
			
		||||
		eventType = watcher.ContainerDelete
 | 
			
		||||
	case (event.Mask & inotify.IN_MOVED_FROM) > 0:
 | 
			
		||||
	case event.Op == fsnotify.Rename:
 | 
			
		||||
		eventType = watcher.ContainerDelete
 | 
			
		||||
	case (event.Mask & inotify.IN_MOVED_TO) > 0:
 | 
			
		||||
		eventType = watcher.ContainerAdd
 | 
			
		||||
	default:
 | 
			
		||||
		// Ignore other events.
 | 
			
		||||
		return nil
 | 
			
		||||
@@ -186,7 +195,7 @@ func (self *rawContainerWatcher) processEvent(event *inotify.Event, events chan
 | 
			
		||||
	switch eventType {
 | 
			
		||||
	case watcher.ContainerAdd:
 | 
			
		||||
		// New container was created, watch it.
 | 
			
		||||
		alreadyWatched, err := self.watchDirectory(event.Name, containerName)
 | 
			
		||||
		alreadyWatched, err := self.watchDirectory(events, event.Name, containerName)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/github.com/google/cadvisor/metrics/prometheus.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/google/cadvisor/metrics/prometheus.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -197,6 +197,27 @@ func NewPrometheusCollector(i infoProvider, f ContainerLabelsFunc) *PrometheusCo
 | 
			
		||||
				getValues: func(s *info.ContainerStats) metricValues {
 | 
			
		||||
					return metricValues{{value: float64(s.Cpu.CFS.ThrottledTime) / float64(time.Second)}}
 | 
			
		||||
				},
 | 
			
		||||
			}, {
 | 
			
		||||
				name:      "container_cpu_schedstat_run_seconds_total",
 | 
			
		||||
				help:      "Time duration the processes of the container have run on the CPU.",
 | 
			
		||||
				valueType: prometheus.CounterValue,
 | 
			
		||||
				getValues: func(s *info.ContainerStats) metricValues {
 | 
			
		||||
					return metricValues{{value: float64(s.Cpu.Schedstat.RunTime) / float64(time.Second)}}
 | 
			
		||||
				},
 | 
			
		||||
			}, {
 | 
			
		||||
				name:      "container_cpu_schedstat_runqueue_seconds_total",
 | 
			
		||||
				help:      "Time duration processes of the container have been waiting on a runqueue.",
 | 
			
		||||
				valueType: prometheus.CounterValue,
 | 
			
		||||
				getValues: func(s *info.ContainerStats) metricValues {
 | 
			
		||||
					return metricValues{{value: float64(s.Cpu.Schedstat.RunqueueTime) / float64(time.Second)}}
 | 
			
		||||
				},
 | 
			
		||||
			}, {
 | 
			
		||||
				name:      "container_cpu_schedstat_run_periods_total",
 | 
			
		||||
				help:      "Number of times processes of the cgroup have run on the cpu",
 | 
			
		||||
				valueType: prometheus.CounterValue,
 | 
			
		||||
				getValues: func(s *info.ContainerStats) metricValues {
 | 
			
		||||
					return metricValues{{value: float64(s.Cpu.Schedstat.RunPeriods)}}
 | 
			
		||||
				},
 | 
			
		||||
			}, {
 | 
			
		||||
				name:      "container_cpu_load_average_10s",
 | 
			
		||||
				help:      "Value of container cpu load average over the last 10 seconds.",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/google/cadvisor/storage/storage.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/cadvisor/storage/storage.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -22,7 +22,7 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type StorageDriver interface {
 | 
			
		||||
	AddStats(ref info.ContainerReference, stats *info.ContainerStats) error
 | 
			
		||||
	AddStats(cInfo *info.ContainerInfo, stats *info.ContainerStats) error
 | 
			
		||||
 | 
			
		||||
	// Close will clear the state of the storage driver. The elements
 | 
			
		||||
	// stored in the underlying storage may or may not be deleted depending
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								vendor/github.com/google/cadvisor/validate/validate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								vendor/github.com/google/cadvisor/validate/validate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -22,6 +22,7 @@ import (
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"log"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"os"
 | 
			
		||||
	"path"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
@@ -133,6 +134,23 @@ func areCgroupsPresent(available map[string]int, desired []string) (bool, string
 | 
			
		||||
	return true, ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func validateCpuCfsBandwidth(available_cgroups map[string]int) string {
 | 
			
		||||
	ok, _ := areCgroupsPresent(available_cgroups, []string{"cpu"})
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return "\tCpu cfs bandwidth status unknown: cpu cgroup not enabled.\n"
 | 
			
		||||
	}
 | 
			
		||||
	mnt, err := cgroups.FindCgroupMountpoint("cpu")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "\tCpu cfs bandwidth status unknown: cpu cgroup not mounted.\n"
 | 
			
		||||
	}
 | 
			
		||||
	_, err = os.Stat(path.Join(mnt, "cpu.cfs_period_us"))
 | 
			
		||||
	if os.IsNotExist(err) {
 | 
			
		||||
		return "\tCpu cfs bandwidth is disabled. Recompile kernel with \"CONFIG_CFS_BANDWIDTH\" enabled.\n"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return "\tCpu cfs bandwidth is enabled.\n"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func validateMemoryAccounting(available_cgroups map[string]int) string {
 | 
			
		||||
	ok, _ := areCgroupsPresent(available_cgroups, []string{"memory"})
 | 
			
		||||
	if !ok {
 | 
			
		||||
@@ -181,6 +199,7 @@ func validateCgroups() (string, string) {
 | 
			
		||||
	out = fmt.Sprintf("Available cgroups: %v\n", available_cgroups)
 | 
			
		||||
	out += desc
 | 
			
		||||
	out += validateMemoryAccounting(available_cgroups)
 | 
			
		||||
	out += validateCpuCfsBandwidth(available_cgroups)
 | 
			
		||||
	return Recommended, out
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								vendor/github.com/mattn/go-shellwords/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/mattn/go-shellwords/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
language: go
 | 
			
		||||
go:
 | 
			
		||||
  - tip
 | 
			
		||||
before_install:
 | 
			
		||||
  - go get github.com/mattn/goveralls
 | 
			
		||||
  - go get golang.org/x/tools/cmd/cover
 | 
			
		||||
script:
 | 
			
		||||
    - $HOME/gopath/bin/goveralls -repotoken 2FMhp57u8LcstKL9B190fLTcEnBtAAiEL
 | 
			
		||||
							
								
								
									
										60
									
								
								vendor/github.com/mattn/go-shellwords/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								vendor/github.com/mattn/go-shellwords/BUILD
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,60 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "shellwords.go",
 | 
			
		||||
        "util_go15.go",
 | 
			
		||||
    ] + select({
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:android": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:darwin": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:dragonfly": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:freebsd": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:linux": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:nacl": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:netbsd": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:openbsd": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:plan9": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:solaris": [
 | 
			
		||||
            "util_posix.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "@io_bazel_rules_go//go/platform:windows": [
 | 
			
		||||
            "util_windows.go",
 | 
			
		||||
        ],
 | 
			
		||||
        "//conditions:default": [],
 | 
			
		||||
    }),
 | 
			
		||||
    importpath = "github.com/mattn/go-shellwords",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [":package-srcs"],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/github.com/mattn/go-shellwords/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								vendor/github.com/mattn/go-shellwords/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
The MIT License (MIT)
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2017 Yasuhiro Matsumoto
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
							
								
								
									
										47
									
								
								vendor/github.com/mattn/go-shellwords/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								vendor/github.com/mattn/go-shellwords/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
# go-shellwords
 | 
			
		||||
 | 
			
		||||
[](https://coveralls.io/r/mattn/go-shellwords?branch=master)
 | 
			
		||||
[](https://travis-ci.org/mattn/go-shellwords)
 | 
			
		||||
 | 
			
		||||
Parse line as shell words.
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
args, err := shellwords.Parse("./foo --bar=baz")
 | 
			
		||||
// args should be ["./foo", "--bar=baz"]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
os.Setenv("FOO", "bar")
 | 
			
		||||
p := shellwords.NewParser()
 | 
			
		||||
p.ParseEnv = true
 | 
			
		||||
args, err := p.Parse("./foo $FOO")
 | 
			
		||||
// args should be ["./foo", "bar"]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
p := shellwords.NewParser()
 | 
			
		||||
p.ParseBacktick = true
 | 
			
		||||
args, err := p.Parse("./foo `echo $SHELL`")
 | 
			
		||||
// args should be ["./foo", "/bin/bash"]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```go
 | 
			
		||||
shellwords.ParseBacktick = true
 | 
			
		||||
p := shellwords.NewParser()
 | 
			
		||||
args, err := p.Parse("./foo `echo $SHELL`")
 | 
			
		||||
// args should be ["./foo", "/bin/bash"]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
# Thanks
 | 
			
		||||
 | 
			
		||||
This is based on cpan module [Parse::CommandLine](https://metacpan.org/pod/Parse::CommandLine).
 | 
			
		||||
 | 
			
		||||
# License
 | 
			
		||||
 | 
			
		||||
under the MIT License: http://mattn.mit-license.org/2017
 | 
			
		||||
 | 
			
		||||
# Author
 | 
			
		||||
 | 
			
		||||
Yasuhiro Matsumoto (a.k.a mattn)
 | 
			
		||||
							
								
								
									
										178
									
								
								vendor/github.com/mattn/go-shellwords/shellwords.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								vendor/github.com/mattn/go-shellwords/shellwords.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,178 @@
 | 
			
		||||
package shellwords
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"os"
 | 
			
		||||
	"regexp"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	ParseEnv      bool = false
 | 
			
		||||
	ParseBacktick bool = false
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var envRe = regexp.MustCompile(`\$({[a-zA-Z0-9_]+}|[a-zA-Z0-9_]+)`)
 | 
			
		||||
 | 
			
		||||
func isSpace(r rune) bool {
 | 
			
		||||
	switch r {
 | 
			
		||||
	case ' ', '\t', '\r', '\n':
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func replaceEnv(s string) string {
 | 
			
		||||
	return envRe.ReplaceAllStringFunc(s, func(s string) string {
 | 
			
		||||
		s = s[1:]
 | 
			
		||||
		if s[0] == '{' {
 | 
			
		||||
			s = s[1 : len(s)-1]
 | 
			
		||||
		}
 | 
			
		||||
		return os.Getenv(s)
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Parser struct {
 | 
			
		||||
	ParseEnv      bool
 | 
			
		||||
	ParseBacktick bool
 | 
			
		||||
	Position      int
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewParser() *Parser {
 | 
			
		||||
	return &Parser{ParseEnv, ParseBacktick, 0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (p *Parser) Parse(line string) ([]string, error) {
 | 
			
		||||
	args := []string{}
 | 
			
		||||
	buf := ""
 | 
			
		||||
	var escaped, doubleQuoted, singleQuoted, backQuote, dollarQuote bool
 | 
			
		||||
	backtick := ""
 | 
			
		||||
 | 
			
		||||
	pos := -1
 | 
			
		||||
	got := false
 | 
			
		||||
 | 
			
		||||
loop:
 | 
			
		||||
	for i, r := range line {
 | 
			
		||||
		if escaped {
 | 
			
		||||
			buf += string(r)
 | 
			
		||||
			escaped = false
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if r == '\\' {
 | 
			
		||||
			if singleQuoted {
 | 
			
		||||
				buf += string(r)
 | 
			
		||||
			} else {
 | 
			
		||||
				escaped = true
 | 
			
		||||
			}
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if isSpace(r) {
 | 
			
		||||
			if singleQuoted || doubleQuoted || backQuote || dollarQuote {
 | 
			
		||||
				buf += string(r)
 | 
			
		||||
				backtick += string(r)
 | 
			
		||||
			} else if got {
 | 
			
		||||
				if p.ParseEnv {
 | 
			
		||||
					buf = replaceEnv(buf)
 | 
			
		||||
				}
 | 
			
		||||
				args = append(args, buf)
 | 
			
		||||
				buf = ""
 | 
			
		||||
				got = false
 | 
			
		||||
			}
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		switch r {
 | 
			
		||||
		case '`':
 | 
			
		||||
			if !singleQuoted && !doubleQuoted && !dollarQuote {
 | 
			
		||||
				if p.ParseBacktick {
 | 
			
		||||
					if backQuote {
 | 
			
		||||
						out, err := shellRun(backtick)
 | 
			
		||||
						if err != nil {
 | 
			
		||||
							return nil, err
 | 
			
		||||
						}
 | 
			
		||||
						buf = out
 | 
			
		||||
					}
 | 
			
		||||
					backtick = ""
 | 
			
		||||
					backQuote = !backQuote
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
				backtick = ""
 | 
			
		||||
				backQuote = !backQuote
 | 
			
		||||
			}
 | 
			
		||||
		case ')':
 | 
			
		||||
			if !singleQuoted && !doubleQuoted && !backQuote {
 | 
			
		||||
				if p.ParseBacktick {
 | 
			
		||||
					if dollarQuote {
 | 
			
		||||
						out, err := shellRun(backtick)
 | 
			
		||||
						if err != nil {
 | 
			
		||||
							return nil, err
 | 
			
		||||
						}
 | 
			
		||||
						buf = out
 | 
			
		||||
					}
 | 
			
		||||
					backtick = ""
 | 
			
		||||
					dollarQuote = !dollarQuote
 | 
			
		||||
					continue
 | 
			
		||||
				}
 | 
			
		||||
				backtick = ""
 | 
			
		||||
				dollarQuote = !dollarQuote
 | 
			
		||||
			}
 | 
			
		||||
		case '(':
 | 
			
		||||
			if !singleQuoted && !doubleQuoted && !backQuote {
 | 
			
		||||
				if !dollarQuote && len(buf) > 0 && buf == "$" {
 | 
			
		||||
					dollarQuote = true
 | 
			
		||||
					buf += "("
 | 
			
		||||
					continue
 | 
			
		||||
				} else {
 | 
			
		||||
					return nil, errors.New("invalid command line string")
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		case '"':
 | 
			
		||||
			if !singleQuoted && !dollarQuote {
 | 
			
		||||
				doubleQuoted = !doubleQuoted
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
		case '\'':
 | 
			
		||||
			if !doubleQuoted && !dollarQuote {
 | 
			
		||||
				singleQuoted = !singleQuoted
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
		case ';', '&', '|', '<', '>':
 | 
			
		||||
			if !(escaped || singleQuoted || doubleQuoted || backQuote) {
 | 
			
		||||
				if r == '>' && len(buf) > 0 {
 | 
			
		||||
					if c := buf[0]; '0' <= c && c <= '9' {
 | 
			
		||||
						i -= 1
 | 
			
		||||
						got = false
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				pos = i
 | 
			
		||||
				break loop
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		got = true
 | 
			
		||||
		buf += string(r)
 | 
			
		||||
		if backQuote || dollarQuote {
 | 
			
		||||
			backtick += string(r)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if got {
 | 
			
		||||
		if p.ParseEnv {
 | 
			
		||||
			buf = replaceEnv(buf)
 | 
			
		||||
		}
 | 
			
		||||
		args = append(args, buf)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if escaped || singleQuoted || doubleQuoted || backQuote || dollarQuote {
 | 
			
		||||
		return nil, errors.New("invalid command line string")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	p.Position = pos
 | 
			
		||||
 | 
			
		||||
	return args, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Parse(line string) ([]string, error) {
 | 
			
		||||
	return NewParser().Parse(line)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										24
									
								
								vendor/github.com/mattn/go-shellwords/util_go15.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								vendor/github.com/mattn/go-shellwords/util_go15.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
// +build !go1.6
 | 
			
		||||
 | 
			
		||||
package shellwords
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"runtime"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func shellRun(line string) (string, error) {
 | 
			
		||||
	var b []byte
 | 
			
		||||
	var err error
 | 
			
		||||
	if runtime.GOOS == "windows" {
 | 
			
		||||
		b, err = exec.Command(os.Getenv("COMSPEC"), "/c", line).Output()
 | 
			
		||||
	} else {
 | 
			
		||||
		b, err = exec.Command(os.Getenv("SHELL"), "-c", line).Output()
 | 
			
		||||
	}
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	return strings.TrimSpace(string(b)), nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								vendor/github.com/mattn/go-shellwords/util_posix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/mattn/go-shellwords/util_posix.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
// +build !windows,go1.6
 | 
			
		||||
 | 
			
		||||
package shellwords
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func shellRun(line string) (string, error) {
 | 
			
		||||
	shell := os.Getenv("SHELL")
 | 
			
		||||
	b, err := exec.Command(shell, "-c", line).Output()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if eerr, ok := err.(*exec.ExitError); ok {
 | 
			
		||||
			b = eerr.Stderr
 | 
			
		||||
		}
 | 
			
		||||
		return "", errors.New(err.Error() + ":" + string(b))
 | 
			
		||||
	}
 | 
			
		||||
	return strings.TrimSpace(string(b)), nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								vendor/github.com/mattn/go-shellwords/util_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								vendor/github.com/mattn/go-shellwords/util_windows.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
// +build windows,go1.6
 | 
			
		||||
 | 
			
		||||
package shellwords
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"os"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func shellRun(line string) (string, error) {
 | 
			
		||||
	shell := os.Getenv("COMSPEC")
 | 
			
		||||
	b, err := exec.Command(shell, "/c", line).Output()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		if eerr, ok := err.(*exec.ExitError); ok {
 | 
			
		||||
			b = eerr.Stderr
 | 
			
		||||
		}
 | 
			
		||||
		return "", errors.New(err.Error() + ":" + string(b))
 | 
			
		||||
	}
 | 
			
		||||
	return strings.TrimSpace(string(b)), nil
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/google.golang.org/grpc/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/google.golang.org/grpc/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -63,7 +63,7 @@ filegroup(
 | 
			
		||||
        "//vendor/google.golang.org/grpc/codes:all-srcs",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/connectivity:all-srcs",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/credentials:all-srcs",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/grpclb/grpc_lb_v1:all-srcs",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/messages:all-srcs",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/grpclog:all-srcs",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/health/grpc_health_v1:all-srcs",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/internal:all-srcs",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										25
									
								
								vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/BUILD
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,25 +0,0 @@
 | 
			
		||||
load("@io_bazel_rules_go//go:def.bzl", "go_library")
 | 
			
		||||
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = ["doc.go"],
 | 
			
		||||
    importpath = "google.golang.org/grpc/grpclb/grpc_lb_v1",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "package-srcs",
 | 
			
		||||
    srcs = glob(["**"]),
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "all-srcs",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        ":package-srcs",
 | 
			
		||||
        "//vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/messages:all-srcs",
 | 
			
		||||
    ],
 | 
			
		||||
    tags = ["automanaged"],
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										21
									
								
								vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								vendor/google.golang.org/grpc/grpclb/grpc_lb_v1/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,21 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright 2017 gRPC authors.
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
// Package grpc_lb_v1 is the parent package of all gRPC loadbalancer
 | 
			
		||||
// message and service protobuf definitions.
 | 
			
		||||
package grpc_lb_v1
 | 
			
		||||
		Reference in New Issue
	
	Block a user