info.go 810 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package lxc
  2. import (
  3. "bufio"
  4. "errors"
  5. "strconv"
  6. "strings"
  7. )
  8. var (
  9. ErrCannotParse = errors.New("cannot parse raw input")
  10. )
  11. type lxcInfo struct {
  12. Running bool
  13. Pid int
  14. }
  15. func parseLxcInfo(raw string) (*lxcInfo, error) {
  16. if raw == "" {
  17. return nil, ErrCannotParse
  18. }
  19. var (
  20. err error
  21. s = bufio.NewScanner(strings.NewReader(raw))
  22. info = &lxcInfo{}
  23. )
  24. for s.Scan() {
  25. text := s.Text()
  26. if s.Err() != nil {
  27. return nil, s.Err()
  28. }
  29. parts := strings.Split(text, ":")
  30. if len(parts) < 2 {
  31. continue
  32. }
  33. switch strings.ToLower(strings.TrimSpace(parts[0])) {
  34. case "state":
  35. info.Running = strings.TrimSpace(parts[1]) == "RUNNING"
  36. case "pid":
  37. info.Pid, err = strconv.Atoi(strings.TrimSpace(parts[1]))
  38. if err != nil {
  39. return nil, err
  40. }
  41. }
  42. }
  43. return info, nil
  44. }