ebpf_exporter
40 строк · 876.0 Байт
1package decoder
2
3import (
4"fmt"
5"strconv"
6
7"github.com/cloudflare/ebpf_exporter/v2/cgroup"
8"github.com/cloudflare/ebpf_exporter/v2/config"
9)
10
11// CGroup is a decoder that transforms cgroup id to path in cgroupfs
12type CGroup struct {
13monitor *cgroup.Monitor
14}
15
16// NewCgroupDecoder creates a new cgroup decoder
17func NewCgroupDecoder() (*CGroup, error) {
18monitor, err := cgroup.NewMonitor("/sys/fs/cgroup")
19if err != nil {
20return nil, fmt.Errorf("error creating cgroup monitor: %v", err)
21}
22
23return &CGroup{monitor}, nil
24}
25
26// Decode transforms cgroup id to path in cgroupfs
27func (c *CGroup) Decode(in []byte, _ config.Decoder) ([]byte, error) {
28cgroupID, err := strconv.Atoi(string(in))
29if err != nil {
30return nil, err
31}
32
33path := c.monitor.Resolve(cgroupID)
34
35if path == "" {
36path = fmt.Sprintf("unknown_cgroup_id:%d", cgroupID)
37}
38
39return []byte(path), nil
40}
41