diff options
| -rw-r--r-- | diskstats/diskstats.go | 75 |
1 files changed, 12 insertions, 63 deletions
diff --git a/diskstats/diskstats.go b/diskstats/diskstats.go index c6d9f9a..4e2094c 100644 --- a/diskstats/diskstats.go +++ b/diskstats/diskstats.go @@ -3,42 +3,25 @@ package diskstats import ( "fmt" "io/ioutil" - "log" - "regexp" - "strconv" - "strings" ) type Diskstats struct { - Pid int - Cmdline string - Count map[string]int - debug string + debug string } -func new(pidstr string) (Diskstats, error) { - pid, err0 := strconv.Atoi(pidstr) - if err0 != nil { - return Diskstats{}, err0 - } - diskstats := Diskstats{Pid: pid} - var rawIo string +func new() (Diskstats, error) { + var raw string + d := Diskstats{} - err1 := diskstats.gatherRaw(&rawIo, "/proc/%d/io") - if err1 != nil { - return diskstats, err1 - } - err2 := diskstats.parseRawIo(rawIo) - if err2 != nil { - return diskstats, err2 + if err := d.gatherRaw(&raw, "/proc/diskstats"); err != nil { + return d, err } - err3 := diskstats.gatherRaw(&diskstats.Cmdline, "/proc/%d/cmdline") - return diskstats, err3 + return d, nil } -func (self *Diskstats) gatherRaw(what *string, pathf string) error { - bytes, err := ioutil.ReadFile(fmt.Sprintf(pathf, self.Pid)) +func (self *Diskstats) gatherRaw(what *string, path string) error { + bytes, err := ioutil.ReadFile(path) if err != nil { return err } else { @@ -47,30 +30,9 @@ func (self *Diskstats) gatherRaw(what *string, pathf string) error { return nil } -func (self *Diskstats) parseRawIo(rawIo string) error { - countMap := make(map[string]int) - for _, line := range strings.Split(rawIo, "\n") { - keyval := strings.Split(line, ": ") - if len(keyval) == 2 { - count, err := strconv.Atoi(keyval[1]) - if err != nil { - return err - } - countMap[keyval[0]] = count - } - } - self.Count = countMap - return nil -} - func (self *Diskstats) String() string { str := "DISKSTATS=========================\n" - str += fmt.Sprintf("PID: %d\n", self.Pid) - str += fmt.Sprintf("Cmdline: %s\n", self.Cmdline) - for key, val := range self.Count { - str += fmt.Sprintf("%s=%d\n", key, val) - } if self.debug != "" { str += fmt.Sprintf("debug: %s\n", self.debug) } @@ -82,21 +44,8 @@ func (self *Diskstats) Print() { fmt.Println(self) } -func Gather(diskstatses chan<- Diskstats) { - re, _ := regexp.Compile("^[0-9]+$") - - dir, err := ioutil.ReadDir("/proc/") - if err != nil { - log.Fatal(err) - } - - for _, direntry := range dir { - name := direntry.Name() - if re.MatchString(name) { - diskstats, err := new(name) - if err == nil { - diskstatses <- diskstats - } - } +func Gather(diskstats chan<- Diskstats) { + if d, err := new(); err == nil { + diskstats <- d } } |
