Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Added support for parsing container ids from docker versions us…
…ing cgroups v2. (#1830)
- Loading branch information
Showing
20 changed files
with
294 additions
and
90 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
/* | ||
* Copyright 2020 New Relic Corporation. All rights reserved. | ||
* SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
'use strict' | ||
|
||
const test = require('tap').test | ||
const fs = require('fs/promises') | ||
const common = require('../../../lib/utilization/common') | ||
const dockerInfo = require('../../../lib/utilization/docker-info') | ||
const helper = require('../../lib/agent_helper') | ||
const path = require('path') | ||
const sinon = require('sinon') | ||
|
||
const TEST_DIRECTORY = path.resolve(__dirname, '../../lib/cross_agent_tests/docker_container_id/') | ||
const TEST_DIRECTORY_V2 = path.resolve( | ||
__dirname, | ||
'../../lib/cross_agent_tests/docker_container_id_v2/' | ||
) | ||
|
||
const tests = [ | ||
{ name: 'v1', testsDir: TEST_DIRECTORY }, | ||
{ name: 'v2', testsDir: TEST_DIRECTORY_V2 } | ||
] | ||
|
||
tests.forEach(({ name, testsDir }) => { | ||
test(`pricing docker info ${name}`, async function (t) { | ||
const os = require('os') | ||
t.teardown(function () { | ||
os.platform.restore() | ||
}) | ||
|
||
sinon.stub(os, 'platform') | ||
os.platform.returns('linux') | ||
const data = await fs.readFile(`${testsDir}/cases.json`) | ||
const cases = JSON.parse(data) | ||
|
||
cases.forEach((testCase) => { | ||
const testFile = path.join(testsDir, testCase.filename) | ||
t.test(testCase.filename, makeTest(testCase, testFile, name === 'v2')) | ||
}) | ||
t.end() | ||
}) | ||
}) | ||
|
||
function makeTest(testCase, testFile, v2) { | ||
return async function (t) { | ||
const agent = helper.loadMockedAgent() | ||
sinon.stub(common, 'readProc') | ||
const file = await fs.readFile(testFile, { encoding: 'utf8' }) | ||
mockProcRead(file, v2) | ||
|
||
t.teardown(function () { | ||
helper.unloadAgent(agent) | ||
dockerInfo.clearVendorCache() | ||
common.readProc.restore() | ||
}) | ||
|
||
await new Promise((resolve) => { | ||
dockerInfo.getVendorInfo(agent, function (err, info) { | ||
if (testCase.containerId) { | ||
t.error(err, 'should not have failed') | ||
t.same(info, { id: testCase.containerId }, 'should have expected container id') | ||
} else { | ||
t.notOk(info, 'should not have found container id') | ||
} | ||
|
||
if (testCase.expectedMetrics) { | ||
// TODO: No tests currently expect metrics, when one does we'll have to | ||
// update this test depending on the format of that. | ||
t.bailout('Docker expected metrics found but can not be handled.') | ||
} else { | ||
t.equal(agent.metrics._metrics.toJSON().length, 0, 'should have no metrics') | ||
} | ||
resolve() | ||
}) | ||
}) | ||
} | ||
} | ||
|
||
function mockProcRead(data, v2) { | ||
if (!v2) { | ||
common.readProc.onCall(0).yields(null, null) | ||
common.readProc.onCall(1).yields(null, data) | ||
} else { | ||
common.readProc.onCall(0).yields(null, data) | ||
} | ||
} |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
These tests cover parsing of Docker container IDs on Linux hosts out of | ||
`/proc/self/mountinfo` (or `/proc/<pid>/mountinfo` more generally). | ||
|
||
The `cases.json` file lists each filename in this directory containing | ||
example `/proc/self/mountinfo` content, and the expected Docker container ID that | ||
should be parsed from that file. |
32 changes: 32 additions & 0 deletions
32
test/lib/cross_agent_tests/docker_container_id_v2/cases.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
[ | ||
{ | ||
"filename": "docker-20.10.16.txt", | ||
"containerId": "84cf3472a20d1bfb4b50e48b6ff50d96dfcd812652d76dd907951e6f98997bce", | ||
"expectedMetrics": null | ||
}, | ||
{ | ||
"filename": "docker-24.0.2.txt", | ||
"containerId": "b0a24eed1b031271d8ba0784b8f354b3da892dfd08bbcf14dd7e8a1cf9292f65", | ||
"expectedMetrics": null | ||
}, | ||
{ | ||
"filename": "empty.txt", | ||
"containerId": null, | ||
"expectedMetrics": null | ||
}, | ||
{ | ||
"filename": "invalid-characters.txt", | ||
"containerId": null, | ||
"expectedMetrics": null | ||
}, | ||
{ | ||
"filename": "docker-too-long.txt", | ||
"containerId": null, | ||
"expectedMetrics": null | ||
}, | ||
{ | ||
"filename": "invalid-length.txt", | ||
"containerId": null, | ||
"expectedMetrics": null | ||
} | ||
] |
24 changes: 24 additions & 0 deletions
24
test/lib/cross_agent_tests/docker_container_id_v2/docker-20.10.16.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
519 413 0:152 / / rw,relatime master:180 - overlay overlay rw,lowerdir=/var/lib/docker/overlay2/l/YCID3333O5VYPYDNTQRZX4GI67:/var/lib/docker/overlay2/l/G7H4TULAFM2UBFRL7QFQPUNXY5:/var/lib/docker/overlay2/l/RLC4GCL75VGXXXYJJO57STHIYN:/var/lib/docker/overlay2/l/YOZKNWFAP6YX74XEKPHX4KG4UN:/var/lib/docker/overlay2/l/46EQ6YX5PQQZ4Z3WCSMQ6Z4YWI:/var/lib/docker/overlay2/l/KGKX3Z5ZMOCDWOFKBS2FSHMQMQ:/var/lib/docker/overlay2/l/CKFYAF4TXZD4RCE6RG6UNL5WVI,upperdir=/var/lib/docker/overlay2/358c429f7b04ee5a228b94efaebe3413a98fcc676b726f078fe875727e3bddd2/diff,workdir=/var/lib/docker/overlay2/358c429f7b04ee5a228b94efaebe3413a98fcc676b726f078fe875727e3bddd2/work | ||
520 519 0:155 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw | ||
521 519 0:156 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
522 521 0:157 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 | ||
523 519 0:158 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro | ||
524 523 0:30 / /sys/fs/cgroup ro,nosuid,nodev,noexec,relatime - cgroup2 cgroup rw | ||
525 521 0:154 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw | ||
526 521 0:159 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k | ||
527 519 254:1 /docker/volumes/3237dea4f8022f1addd7b6f072a9c847eb3e5b8df0d599f462ba7040884d4618/_data /data rw,relatime master:28 - ext4 /dev/vda1 rw | ||
528 519 254:1 /docker/containers/84cf3472a20d1bfb4b50e48b6ff50d96dfcd812652d76dd907951e6f98997bce/resolv.conf /etc/resolv.conf rw,relatime - ext4 /dev/vda1 rw | ||
529 519 254:1 /docker/containers/84cf3472a20d1bfb4b50e48b6ff50d96dfcd812652d76dd907951e6f98997bce/hostname /etc/hostname rw,relatime - ext4 /dev/vda1 rw | ||
530 519 254:1 /docker/containers/84cf3472a20d1bfb4b50e48b6ff50d96dfcd812652d76dd907951e6f98997bce/hosts /etc/hosts rw,relatime - ext4 /dev/vda1 rw | ||
414 521 0:157 /0 /dev/console rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 | ||
415 520 0:155 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
416 520 0:155 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
417 520 0:155 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
418 520 0:155 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
419 520 0:155 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
420 520 0:160 / /proc/acpi ro,relatime - tmpfs tmpfs ro | ||
421 520 0:156 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
422 520 0:156 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
423 520 0:156 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
424 520 0:156 /null /proc/sched_debug rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
425 523 0:161 / /sys/firmware ro,relatime - tmpfs tmpfs ro |
21 changes: 21 additions & 0 deletions
21
test/lib/cross_agent_tests/docker_container_id_v2/docker-24.0.2.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
1014 1013 0:269 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw | ||
1019 1013 0:270 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
1020 1019 0:271 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 | ||
1021 1013 0:272 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro | ||
1022 1021 0:30 / /sys/fs/cgroup ro,nosuid,nodev,noexec,relatime - cgroup2 cgroup rw | ||
1023 1019 0:268 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw | ||
1024 1019 0:273 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k | ||
1025 1013 254:1 /docker/containers/b0a24eed1b031271d8ba0784b8f354b3da892dfd08bbcf14dd7e8a1cf9292f65/resolv.conf /etc/resolv.conf rw,relatime - ext4 /dev/vda1 rw,discard | ||
1026 1013 254:1 /docker/containers/b0a24eed1b031271d8ba0784b8f354b3da892dfd08bbcf14dd7e8a1cf9292f65/hostname /etc/hostname rw,relatime - ext4 /dev/vda1 rw,discard | ||
1027 1013 254:1 /docker/containers/b0a24eed1b031271d8ba0784b8f354b3da892dfd08bbcf14dd7e8a1cf9292f65/hosts /etc/hosts rw,relatime - ext4 /dev/vda1 rw,discard | ||
717 1019 0:271 /0 /dev/console rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 | ||
718 1014 0:269 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
719 1014 0:269 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
720 1014 0:269 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
721 1014 0:269 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
723 1014 0:269 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
726 1014 0:274 / /proc/acpi ro,relatime - tmpfs tmpfs ro | ||
727 1014 0:270 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
728 1014 0:270 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
729 1014 0:270 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
730 1021 0:275 / /sys/firmware ro,relatime - tmpfs tmpfs ro |
21 changes: 21 additions & 0 deletions
21
test/lib/cross_agent_tests/docker_container_id_v2/docker-too-long.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
1014 1013 0:269 / /proc rw,nosuid,nodev,noexec,relatime - proc proc rw | ||
1019 1013 0:270 / /dev rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
1020 1019 0:271 / /dev/pts rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 | ||
1021 1013 0:272 / /sys ro,nosuid,nodev,noexec,relatime - sysfs sysfs ro | ||
1022 1021 0:30 / /sys/fs/cgroup ro,nosuid,nodev,noexec,relatime - cgroup2 cgroup rw | ||
1023 1019 0:268 / /dev/mqueue rw,nosuid,nodev,noexec,relatime - mqueue mqueue rw | ||
1024 1019 0:273 / /dev/shm rw,nosuid,nodev,noexec,relatime - tmpfs shm rw,size=65536k | ||
1025 1013 254:1 /docker/containers/3ccfa00432798ff38f85839de1e396f771b4acbe9f4ddea0a761c39b9790a7821/resolv.conf /etc/resolv.conf rw,relatime - ext4 /dev/vda1 rw,discard | ||
1026 1013 254:1 /docker/containers/3ccfa00432798ff38f85839de1e396f771b4acbe9f4ddea0a761c39b9790a7821/hostname /etc/hostname rw,relatime - ext4 /dev/vda1 rw,discard | ||
1027 1013 254:1 /docker/containers/3ccfa00432798ff38f85839de1e396f771b4acbe9f4ddea0a761c39b9790a7821/hosts /etc/hosts rw,relatime - ext4 /dev/vda1 rw,discard | ||
717 1019 0:271 /0 /dev/console rw,nosuid,noexec,relatime - devpts devpts rw,gid=5,mode=620,ptmxmode=666 | ||
718 1014 0:269 /bus /proc/bus ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
719 1014 0:269 /fs /proc/fs ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
720 1014 0:269 /irq /proc/irq ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
721 1014 0:269 /sys /proc/sys ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
723 1014 0:269 /sysrq-trigger /proc/sysrq-trigger ro,nosuid,nodev,noexec,relatime - proc proc rw | ||
726 1014 0:274 / /proc/acpi ro,relatime - tmpfs tmpfs ro | ||
727 1014 0:270 /null /proc/kcore rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
728 1014 0:270 /null /proc/keys rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
729 1014 0:270 /null /proc/timer_list rw,nosuid - tmpfs tmpfs rw,size=65536k,mode=755 | ||
730 1021 0:275 / /sys/firmware ro,relatime - tmpfs tmpfs ro |
Empty file.
Oops, something went wrong.