79 lines
2.5 KiB
JavaScript
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 })
|
|
})
|