Files
peardata/test/docker-collector.test.js
T
Raven Scott 584e1c9c42
CI / test (push) Successful in 1m1s
Release rolling / release (push) Successful in 7m11s
Update For Docker Socket Support
2026-07-19 13:26:52 -04:00

79 lines
2.5 KiB
JavaScript

import test from 'brittle'
import fs from 'fs'
import path from 'path'
import os from 'os'
import {
discoverCgroupContainers,
readCgroupCpu,
readCgroupMemory,
isDockerCollectorEnabled,
resolveDockerSocket,
} from '../server/services/collectors/docker.js'
import {
makeDockerCpuChart,
makeDockerMemChart,
DOCKER_CONTAINERS_CHART,
} from '../shared/metrics.js'
function writeFixtureCgroup(root, id) {
const dir = path.join(root, `docker-${id}.scope`)
fs.mkdirSync(dir, { recursive: true })
fs.writeFileSync(
path.join(dir, 'cpu.stat'),
'usage_usec 5000000\nuser_usec 4000000\nsystem_usec 1000000\n'
)
fs.writeFileSync(path.join(dir, 'memory.current'), String(64 * 1024 * 1024))
fs.writeFileSync(path.join(dir, 'memory.max'), String(256 * 1024 * 1024))
return dir
}
test('docker chart helpers', (t) => {
t.is(DOCKER_CONTAINERS_CHART.id, 'docker.containers')
const cpu = makeDockerCpuChart('abc123def456', 'nginx')
t.is(cpu.id, 'docker.cpu.abc123def456')
t.is(cpu.context, 'docker.cpu')
t.is(cpu.title, 'nginx · CPU')
t.is(cpu.family, 'nginx')
const mem = makeDockerMemChart('abc123def456', 'nginx')
t.is(mem.id, 'docker.mem.abc123def456')
t.is(mem.title, 'nginx · memory')
t.ok(mem.dimensions.find((d) => d.id === 'usage'))
})
test('isDockerCollectorEnabled', (t) => {
const prev = process.env.PEARDATA_DOCKER
delete process.env.PEARDATA_DOCKER
t.absent(isDockerCollectorEnabled())
process.env.PEARDATA_DOCKER = '1'
t.ok(isDockerCollectorEnabled())
if (prev == null) delete process.env.PEARDATA_DOCKER
else process.env.PEARDATA_DOCKER = prev
})
test('resolveDockerSocket prefers existing preferred path', (t) => {
const fallback = resolveDockerSocket('/nonexistent-docker-sock-peardata-test')
t.ok(typeof fallback === 'string')
t.ok(fallback.includes('docker.sock') || fallback.includes('podman.sock'))
})
test('readCgroupCpu / memory from fixture', (t) => {
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'peardata-cgroup-'))
const slice = path.join(tmp, 'system.slice')
fs.mkdirSync(slice, { recursive: true })
const id = 'a'.repeat(64)
const cgroupPath = writeFixtureCgroup(slice, id)
const cpu = readCgroupCpu(cgroupPath)
t.ok(cpu)
t.is(cpu.usageNs, 5000000 * 1000)
const mem = readCgroupMemory(cgroupPath)
t.ok(mem)
t.is(mem.usage, 64 * 1024 * 1024)
t.is(mem.limit, 256 * 1024 * 1024)
t.ok(typeof discoverCgroupContainers === 'function')
fs.rmSync(tmp, { recursive: true, force: true })
})