Skip to content

Commit 2c64901

Browse files
authored
Merge pull request #271 from jwilder/jw-ecs
Fix ECS container ID parsing
2 parents e89ef42 + c9bde3f commit 2c64901

File tree

2 files changed

+71
-8
lines changed

2 files changed

+71
-8
lines changed

context.go

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -169,20 +169,44 @@ func GetCurrentContainerID() string {
169169
scanner := bufio.NewScanner(reader)
170170
scanner.Split(bufio.ScanLines)
171171

172-
regex := "/docker[/-]([[:alnum:]]{64})(\\.scope)?$"
173-
re := regexp.MustCompilePOSIX(regex)
174-
175172
for scanner.Scan() {
176173
_, lines, err := bufio.ScanLines([]byte(scanner.Text()), true)
177174
if err == nil {
178-
if re.MatchString(string(lines)) {
179-
submatches := re.FindStringSubmatch(string(lines))
180-
containerID := submatches[1]
181-
182-
return containerID
175+
strLines := string(lines)
176+
if id := matchDockerCurrentContainerID(strLines); id != "" {
177+
return id
178+
} else if matchECSCurrentContainerID(strLines); id != "" {
179+
return id
183180
}
184181
}
185182
}
186183

187184
return ""
188185
}
186+
187+
func matchDockerCurrentContainerID(lines string) string {
188+
regex := "/docker[/-]([[:alnum:]]{64})(\\.scope)?$"
189+
re := regexp.MustCompilePOSIX(regex)
190+
191+
if re.MatchString(lines) {
192+
submatches := re.FindStringSubmatch(string(lines))
193+
containerID := submatches[1]
194+
195+
return containerID
196+
}
197+
return ""
198+
}
199+
200+
func matchECSCurrentContainerID(lines string) string {
201+
regex := "/ecs\\/[^\\/]+\\/(.+)$"
202+
re := regexp.MustCompilePOSIX(regex)
203+
204+
if re.MatchString(string(lines)) {
205+
submatches := re.FindStringSubmatch(string(lines))
206+
containerID := submatches[1]
207+
208+
return containerID
209+
}
210+
211+
return ""
212+
}

context_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,42 @@ func TestGetCurrentContainerID(t *testing.T) {
1111
t.Fail()
1212
}
1313
}
14+
15+
func TestGetCurrentContainerID_ECS(t *testing.T) {
16+
cgroup :=
17+
`9:perf_event:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f
18+
8:memory:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f
19+
7:hugetlb:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f
20+
6:freezer:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f
21+
5:devices:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f
22+
4:cpuset:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f
23+
3:cpuacct:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f
24+
2:cpu:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f
25+
1:blkio:/ecs/628967a1-46b4-4a8a-84ff-605128f4679e/3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f`
26+
27+
if got, exp := matchECSCurrentContainerID(cgroup), "3c94e08259a6235781bb65f3dec91150c92e9d414ecc410d6245687392d3900f"; got != exp {
28+
t.Fatalf("id mismatch: got %v, exp %v", got, exp)
29+
}
30+
}
31+
32+
func TestGetCurrentContainerID_DockerCE(t *testing.T) {
33+
cgroup :=
34+
`13:name=systemd:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
35+
12:pids:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
36+
11:hugetlb:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
37+
10:net_prio:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
38+
9:perf_event:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
39+
8:net_cls:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
40+
7:freezer:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
41+
6:devices:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
42+
5:memory:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
43+
4:blkio:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
44+
3:cpuacct:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
45+
2:cpu:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb
46+
1:cpuset:/docker-ce/docker/18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb`
47+
48+
if got, exp := matchDockerCurrentContainerID(cgroup), "18862cabc2e0d24142cf93c46ccb6e070c2ea7b996c81c0311ec0309abcbcdfb"; got != exp {
49+
t.Fatalf("id mismatch: got %v, exp %v", got, exp)
50+
}
51+
52+
}

0 commit comments

Comments
 (0)