func (s *PerCgroupStatMetrics) Collect() { file, err := os.Open(s.path + "/" + "cpu.stat") if err != nil { return } scanner := bufio.NewScanner(file) for scanner.Scan() { f := regexp.MustCompile("\\s+").Split(scanner.Text(), 2) if f[0] == "nr_periods" { s.Nr_periods.Set(misc.ParseUint(f[1])) } if f[0] == "nr_throttled" { s.Nr_throttled.Set(misc.ParseUint(f[1])) } if f[0] == "throttled_time" { s.Throttled_time.Set(misc.ParseUint(f[1])) } } s.Cfs_period_us.Set( float64(misc.ReadUintFromFile( s.path + "/" + "cpu.cfs_period_us"))) s.Cfs_quota_us.Set( float64(misc.ReadUintFromFile( s.path + "/" + "cpu.cfs_quota_us"))) }
func (s *PerCgroupStatMetrics) Collect() { file, err := os.Open(s.path + "/" + "memory.stat") if err != nil { fmt.Println(err) return } d := map[string]*metrics.Gauge{} // Get all fields we care about r := reflect.ValueOf(s).Elem() typeOfT := r.Type() for i := 0; i < r.NumField(); i++ { f := r.Field(i) if f.Kind().String() == "ptr" && f.Type().Elem() == reflect.TypeOf(metrics.Gauge{}) { d[strings.ToLower(typeOfT.Field(i).Name)] = f.Interface().(*metrics.Gauge) } } scanner := bufio.NewScanner(file) for scanner.Scan() { f := regexp.MustCompile("[\\s]+").Split(scanner.Text(), 2) g, ok := d[strings.ToLower(f[0])] if ok { parseCgroupMemLine(g, f) } } s.Soft_Limit_In_Bytes.Set( float64(misc.ReadUintFromFile( s.path + "/" + "memory.soft_limit_in_bytes"))) }
// Collect() collects interface metrics // TODO: perhaps use sysfs func (s *InterfaceStat) Collect() { file, err := os.Open("/proc/net/dev") defer file.Close() if err != nil { return } var rx [8]uint64 var tx [8]uint64 scanner := bufio.NewScanner(file) scanner.Scan() for scanner.Scan() { f := strings.Split(scanner.Text(), ":") if len(f) < 2 { continue } dev := strings.TrimSpace(f[0]) rest := f[1] fmt.Sscanf(rest, "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", &rx[0], &rx[1], &rx[2], &rx[3], &rx[4], &rx[5], &rx[6], &rx[7], &tx[0], &tx[1], &tx[2], &tx[3], &tx[4], &tx[5], &tx[6], &tx[7]) o, ok := s.Interfaces[dev] if !ok { o = NewPerInterfaceStat(s.m, dev) s.Interfaces[dev] = o } d := o.Metrics d.RXbytes.Set(rx[0]) d.RXpackets.Set(rx[1]) d.RXerrs.Set(rx[2]) d.RXdrop.Set(rx[3]) d.RXfifo.Set(rx[4]) d.RXframe.Set(rx[5]) d.RXcompressed.Set(rx[6]) d.RXmulticast.Set(rx[7]) d.TXbytes.Set(tx[0]) d.TXpackets.Set(tx[1]) d.TXerrs.Set(tx[2]) d.TXdrop.Set(tx[3]) d.TXfifo.Set(tx[4]) d.TXframe.Set(tx[5]) d.TXcompressed.Set(tx[6]) d.TXmulticast.Set(tx[7]) speed := misc.ReadUintFromFile("/sys/class/net/" + dev + "/speed") if speed > 0 { d.Speed.Set(float64(speed)) } } }