taskstats.go 879 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package containers
  2. import (
  3. "fmt"
  4. "sync"
  5. "github.com/mdlayher/taskstats"
  6. )
  7. var (
  8. taskstatsClient *taskstats.Client
  9. taskstatsLock sync.Mutex
  10. )
  11. func TaskstatsInit() error {
  12. c, err := taskstats.New()
  13. if err != nil {
  14. return err
  15. }
  16. taskstatsClient = c
  17. return nil
  18. }
  19. func TaskstatsTGID(pid uint32) (*taskstats.Stats, error) {
  20. if taskstatsClient == nil {
  21. return nil, fmt.Errorf("taskstats client not initialized")
  22. }
  23. taskstatsLock.Lock()
  24. defer taskstatsLock.Unlock()
  25. s, err := taskstatsClient.TGID(int(pid))
  26. if err != nil {
  27. return nil, err
  28. }
  29. return s, nil
  30. }
  31. func TaskstatsPID(pid uint32) (*taskstats.Stats, error) {
  32. if taskstatsClient == nil {
  33. return nil, fmt.Errorf("taskstats client not initialized")
  34. }
  35. taskstatsLock.Lock()
  36. defer taskstatsLock.Unlock()
  37. s, err := taskstatsClient.PID(int(pid))
  38. if err != nil {
  39. return nil, err
  40. }
  41. return s, nil
  42. }