From fa1ba97540d967e5ad3925e2ffdcafa70b9f87bf Mon Sep 17 00:00:00 2001 From: Joshua Powers Date: Tue, 31 Oct 2023 10:48:54 -0600 Subject: [PATCH] fix(inputs.cgroup): Escape backslashes (#14187) --- plugins/inputs/cgroup/cgroup_linux.go | 2 ++ plugins/inputs/cgroup/cgroup_test.go | 26 +++++++++++++++++++ .../backslash/machine-qemu-1-ubuntu/cpu.stat | 4 +++ 3 files changed, 32 insertions(+) create mode 100644 plugins/inputs/cgroup/testdata/backslash/machine-qemu-1-ubuntu/cpu.stat diff --git a/plugins/inputs/cgroup/cgroup_linux.go b/plugins/inputs/cgroup/cgroup_linux.go index 2b73273e4..780d35629 100644 --- a/plugins/inputs/cgroup/cgroup_linux.go +++ b/plugins/inputs/cgroup/cgroup_linux.go @@ -109,6 +109,8 @@ func (g *CGroup) generateDirs(list chan<- pathInfo) { } func (g *CGroup) generateFiles(dir string, list chan<- pathInfo) { + dir = strings.Replace(dir, "\\", "\\\\", -1) + defer close(list) for _, file := range g.Files { // getting all file paths that match the pattern 'dir + file' diff --git a/plugins/inputs/cgroup/cgroup_test.go b/plugins/inputs/cgroup/cgroup_test.go index ead3bac6a..d30cebd83 100644 --- a/plugins/inputs/cgroup/cgroup_test.go +++ b/plugins/inputs/cgroup/cgroup_test.go @@ -416,3 +416,29 @@ func TestCgroupStatistics_8(t *testing.T) { require.NoError(t, acc.GatherError(cg.Gather)) require.Len(t, cg.logged, 1) } + +func TestCgroupEscapeDir(t *testing.T) { + var acc testutil.Accumulator + var cg = &CGroup{ + Paths: []string{"testdata/backslash/machine-qemu\x2d1\x2d*"}, + Files: []string{"cpu.stat"}, + logged: make(map[string]bool), + } + + expected := []telegraf.Metric{ + metric.New( + "cgroup", + map[string]string{"path": `testdata/backslash/machine-qemu-1-ubuntu`}, + map[string]interface{}{ + "cpu.stat.core_sched.force_idle_usec": int64(0), + "cpu.stat.system_usec": int64(103537582650), + "cpu.stat.usage_usec": int64(614953149468), + "cpu.stat.user_usec": int64(511415566817), + }, + time.Unix(0, 0), + ), + } + + require.NoError(t, acc.GatherError(cg.Gather)) + testutil.RequireMetricsEqual(t, expected, acc.GetTelegrafMetrics(), testutil.IgnoreTime()) +} diff --git a/plugins/inputs/cgroup/testdata/backslash/machine-qemu-1-ubuntu/cpu.stat b/plugins/inputs/cgroup/testdata/backslash/machine-qemu-1-ubuntu/cpu.stat new file mode 100644 index 000000000..de2e627c1 --- /dev/null +++ b/plugins/inputs/cgroup/testdata/backslash/machine-qemu-1-ubuntu/cpu.stat @@ -0,0 +1,4 @@ +usage_usec 614953149468 +user_usec 511415566817 +system_usec 103537582650 +core_sched.force_idle_usec 0