Skip to content

Commit 59e79fa

Browse files
authored
Allow multiple keys when parsing cgroups (influxdata#8108)
1 parent f69b37b commit 59e79fa

File tree

3 files changed

+164
-10
lines changed

3 files changed

+164
-10
lines changed

plugins/inputs/cgroup/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ VAL1\n
2727
VAL0 VAL1 ...\n
2828
```
2929

30-
* New line separated key-space-value's
30+
* Space separated keys and value, separated by new line
3131

3232
```
33-
KEY0 VAL0\n
34-
KEY1 VAL1\n
33+
KEY0 ... VAL0\n
34+
KEY1 ... VAL1\n
3535
```
3636

3737

plugins/inputs/cgroup/cgroup_linux.go

+9-7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"path/filepath"
1111
"regexp"
1212
"strconv"
13+
"strings"
1314

1415
"github.com/influxdata/telegraf"
1516
)
@@ -168,7 +169,7 @@ type fileFormat struct {
168169
parser func(measurement string, fields map[string]interface{}, b []byte)
169170
}
170171

171-
const keyPattern = "[[:alpha:]_]+"
172+
const keyPattern = "[[:alnum:]:_]+"
172173
const valuePattern = "[\\d-]+"
173174

174175
var fileFormats = [...]fileFormat{
@@ -208,17 +209,18 @@ var fileFormats = [...]fileFormat{
208209
}
209210
},
210211
},
211-
// KEY0 VAL0\n
212-
// KEY1 VAL1\n
212+
// KEY0 ... VAL0\n
213+
// KEY1 ... VAL1\n
213214
// ...
214215
{
215-
name: "New line separated key-space-value's",
216-
pattern: "^(" + keyPattern + " " + valuePattern + "\n)+$",
216+
name: "Space separated keys and value, separated by new line",
217+
pattern: "^((" + keyPattern + " )+" + valuePattern + "\n)+$",
217218
parser: func(measurement string, fields map[string]interface{}, b []byte) {
218-
re := regexp.MustCompile("(" + keyPattern + ") (" + valuePattern + ")\n")
219+
re := regexp.MustCompile("((?:" + keyPattern + " ?)+) (" + valuePattern + ")\n")
219220
matches := re.FindAllStringSubmatch(string(b), -1)
220221
for _, v := range matches {
221-
fields[measurement+"."+v[1]] = numberOrString(v[2])
222+
k := strings.ReplaceAll(v[1], " ", ".")
223+
fields[measurement+"."+k] = numberOrString(v[2])
222224
}
223225
},
224226
},

plugins/inputs/cgroup/cgroup_test.go

+152
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,155 @@ func TestCgroupStatistics_6(t *testing.T) {
180180
}
181181
acc.AssertContainsTaggedFields(t, "cgroup", fields, tags)
182182
}
183+
184+
// ======================================================================
185+
186+
var cg7 = &CGroup{
187+
Paths: []string{"testdata/blkio"},
188+
Files: []string{"blkio.throttle.io_serviced"},
189+
}
190+
191+
func TestCgroupStatistics_7(t *testing.T) {
192+
var acc testutil.Accumulator
193+
194+
err := acc.GatherError(cg7.Gather)
195+
require.NoError(t, err)
196+
197+
tags := map[string]string{
198+
"path": "testdata/blkio",
199+
}
200+
fields := map[string]interface{}{
201+
"blkio.throttle.io_serviced.11:0.Read": int64(0),
202+
"blkio.throttle.io_serviced.11:0.Write": int64(0),
203+
"blkio.throttle.io_serviced.11:0.Sync": int64(0),
204+
"blkio.throttle.io_serviced.11:0.Async": int64(0),
205+
"blkio.throttle.io_serviced.11:0.Total": int64(0),
206+
"blkio.throttle.io_serviced.8:0.Read": int64(49134),
207+
"blkio.throttle.io_serviced.8:0.Write": int64(216703),
208+
"blkio.throttle.io_serviced.8:0.Sync": int64(177906),
209+
"blkio.throttle.io_serviced.8:0.Async": int64(87931),
210+
"blkio.throttle.io_serviced.8:0.Total": int64(265837),
211+
"blkio.throttle.io_serviced.7:7.Read": int64(0),
212+
"blkio.throttle.io_serviced.7:7.Write": int64(0),
213+
"blkio.throttle.io_serviced.7:7.Sync": int64(0),
214+
"blkio.throttle.io_serviced.7:7.Async": int64(0),
215+
"blkio.throttle.io_serviced.7:7.Total": int64(0),
216+
"blkio.throttle.io_serviced.7:6.Read": int64(0),
217+
"blkio.throttle.io_serviced.7:6.Write": int64(0),
218+
"blkio.throttle.io_serviced.7:6.Sync": int64(0),
219+
"blkio.throttle.io_serviced.7:6.Async": int64(0),
220+
"blkio.throttle.io_serviced.7:6.Total": int64(0),
221+
"blkio.throttle.io_serviced.7:5.Read": int64(0),
222+
"blkio.throttle.io_serviced.7:5.Write": int64(0),
223+
"blkio.throttle.io_serviced.7:5.Sync": int64(0),
224+
"blkio.throttle.io_serviced.7:5.Async": int64(0),
225+
"blkio.throttle.io_serviced.7:5.Total": int64(0),
226+
"blkio.throttle.io_serviced.7:4.Read": int64(0),
227+
"blkio.throttle.io_serviced.7:4.Write": int64(0),
228+
"blkio.throttle.io_serviced.7:4.Sync": int64(0),
229+
"blkio.throttle.io_serviced.7:4.Async": int64(0),
230+
"blkio.throttle.io_serviced.7:4.Total": int64(0),
231+
"blkio.throttle.io_serviced.7:3.Read": int64(0),
232+
"blkio.throttle.io_serviced.7:3.Write": int64(0),
233+
"blkio.throttle.io_serviced.7:3.Sync": int64(0),
234+
"blkio.throttle.io_serviced.7:3.Async": int64(0),
235+
"blkio.throttle.io_serviced.7:3.Total": int64(0),
236+
"blkio.throttle.io_serviced.7:2.Read": int64(0),
237+
"blkio.throttle.io_serviced.7:2.Write": int64(0),
238+
"blkio.throttle.io_serviced.7:2.Sync": int64(0),
239+
"blkio.throttle.io_serviced.7:2.Async": int64(0),
240+
"blkio.throttle.io_serviced.7:2.Total": int64(0),
241+
"blkio.throttle.io_serviced.7:1.Read": int64(0),
242+
"blkio.throttle.io_serviced.7:1.Write": int64(0),
243+
"blkio.throttle.io_serviced.7:1.Sync": int64(0),
244+
"blkio.throttle.io_serviced.7:1.Async": int64(0),
245+
"blkio.throttle.io_serviced.7:1.Total": int64(0),
246+
"blkio.throttle.io_serviced.7:0.Read": int64(0),
247+
"blkio.throttle.io_serviced.7:0.Write": int64(0),
248+
"blkio.throttle.io_serviced.7:0.Sync": int64(0),
249+
"blkio.throttle.io_serviced.7:0.Async": int64(0),
250+
"blkio.throttle.io_serviced.7:0.Total": int64(0),
251+
"blkio.throttle.io_serviced.1:15.Read": int64(3),
252+
"blkio.throttle.io_serviced.1:15.Write": int64(0),
253+
"blkio.throttle.io_serviced.1:15.Sync": int64(0),
254+
"blkio.throttle.io_serviced.1:15.Async": int64(3),
255+
"blkio.throttle.io_serviced.1:15.Total": int64(3),
256+
"blkio.throttle.io_serviced.1:14.Read": int64(3),
257+
"blkio.throttle.io_serviced.1:14.Write": int64(0),
258+
"blkio.throttle.io_serviced.1:14.Sync": int64(0),
259+
"blkio.throttle.io_serviced.1:14.Async": int64(3),
260+
"blkio.throttle.io_serviced.1:14.Total": int64(3),
261+
"blkio.throttle.io_serviced.1:13.Read": int64(3),
262+
"blkio.throttle.io_serviced.1:13.Write": int64(0),
263+
"blkio.throttle.io_serviced.1:13.Sync": int64(0),
264+
"blkio.throttle.io_serviced.1:13.Async": int64(3),
265+
"blkio.throttle.io_serviced.1:13.Total": int64(3),
266+
"blkio.throttle.io_serviced.1:12.Read": int64(3),
267+
"blkio.throttle.io_serviced.1:12.Write": int64(0),
268+
"blkio.throttle.io_serviced.1:12.Sync": int64(0),
269+
"blkio.throttle.io_serviced.1:12.Async": int64(3),
270+
"blkio.throttle.io_serviced.1:12.Total": int64(3),
271+
"blkio.throttle.io_serviced.1:11.Read": int64(3),
272+
"blkio.throttle.io_serviced.1:11.Write": int64(0),
273+
"blkio.throttle.io_serviced.1:11.Sync": int64(0),
274+
"blkio.throttle.io_serviced.1:11.Async": int64(3),
275+
"blkio.throttle.io_serviced.1:11.Total": int64(3),
276+
"blkio.throttle.io_serviced.1:10.Read": int64(3),
277+
"blkio.throttle.io_serviced.1:10.Write": int64(0),
278+
"blkio.throttle.io_serviced.1:10.Sync": int64(0),
279+
"blkio.throttle.io_serviced.1:10.Async": int64(3),
280+
"blkio.throttle.io_serviced.1:10.Total": int64(3),
281+
"blkio.throttle.io_serviced.1:9.Read": int64(3),
282+
"blkio.throttle.io_serviced.1:9.Write": int64(0),
283+
"blkio.throttle.io_serviced.1:9.Sync": int64(0),
284+
"blkio.throttle.io_serviced.1:9.Async": int64(3),
285+
"blkio.throttle.io_serviced.1:9.Total": int64(3),
286+
"blkio.throttle.io_serviced.1:8.Read": int64(3),
287+
"blkio.throttle.io_serviced.1:8.Write": int64(0),
288+
"blkio.throttle.io_serviced.1:8.Sync": int64(0),
289+
"blkio.throttle.io_serviced.1:8.Async": int64(3),
290+
"blkio.throttle.io_serviced.1:8.Total": int64(3),
291+
"blkio.throttle.io_serviced.1:7.Read": int64(3),
292+
"blkio.throttle.io_serviced.1:7.Write": int64(0),
293+
"blkio.throttle.io_serviced.1:7.Sync": int64(0),
294+
"blkio.throttle.io_serviced.1:7.Async": int64(3),
295+
"blkio.throttle.io_serviced.1:7.Total": int64(3),
296+
"blkio.throttle.io_serviced.1:6.Read": int64(3),
297+
"blkio.throttle.io_serviced.1:6.Write": int64(0),
298+
"blkio.throttle.io_serviced.1:6.Sync": int64(0),
299+
"blkio.throttle.io_serviced.1:6.Async": int64(3),
300+
"blkio.throttle.io_serviced.1:6.Total": int64(3),
301+
"blkio.throttle.io_serviced.1:5.Read": int64(3),
302+
"blkio.throttle.io_serviced.1:5.Write": int64(0),
303+
"blkio.throttle.io_serviced.1:5.Sync": int64(0),
304+
"blkio.throttle.io_serviced.1:5.Async": int64(3),
305+
"blkio.throttle.io_serviced.1:5.Total": int64(3),
306+
"blkio.throttle.io_serviced.1:4.Read": int64(3),
307+
"blkio.throttle.io_serviced.1:4.Write": int64(0),
308+
"blkio.throttle.io_serviced.1:4.Sync": int64(0),
309+
"blkio.throttle.io_serviced.1:4.Async": int64(3),
310+
"blkio.throttle.io_serviced.1:4.Total": int64(3),
311+
"blkio.throttle.io_serviced.1:3.Read": int64(3),
312+
"blkio.throttle.io_serviced.1:3.Write": int64(0),
313+
"blkio.throttle.io_serviced.1:3.Sync": int64(0),
314+
"blkio.throttle.io_serviced.1:3.Async": int64(3),
315+
"blkio.throttle.io_serviced.1:3.Total": int64(3),
316+
"blkio.throttle.io_serviced.1:2.Read": int64(3),
317+
"blkio.throttle.io_serviced.1:2.Write": int64(0),
318+
"blkio.throttle.io_serviced.1:2.Sync": int64(0),
319+
"blkio.throttle.io_serviced.1:2.Async": int64(3),
320+
"blkio.throttle.io_serviced.1:2.Total": int64(3),
321+
"blkio.throttle.io_serviced.1:1.Read": int64(3),
322+
"blkio.throttle.io_serviced.1:1.Write": int64(0),
323+
"blkio.throttle.io_serviced.1:1.Sync": int64(0),
324+
"blkio.throttle.io_serviced.1:1.Async": int64(3),
325+
"blkio.throttle.io_serviced.1:1.Total": int64(3),
326+
"blkio.throttle.io_serviced.1:0.Read": int64(3),
327+
"blkio.throttle.io_serviced.1:0.Write": int64(0),
328+
"blkio.throttle.io_serviced.1:0.Sync": int64(0),
329+
"blkio.throttle.io_serviced.1:0.Async": int64(3),
330+
"blkio.throttle.io_serviced.1:0.Total": int64(3),
331+
"blkio.throttle.io_serviced.Total": int64(265885),
332+
}
333+
acc.AssertContainsTaggedFields(t, "cgroup", fields, tags)
334+
}

0 commit comments

Comments
 (0)