mem_plan9.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //go:build plan9
  2. // +build plan9
  3. package mem
  4. import (
  5. "context"
  6. "os"
  7. stats "github.com/lufia/plan9stats"
  8. "github.com/shirou/gopsutil/v3/internal/common"
  9. )
  10. func SwapMemory() (*SwapMemoryStat, error) {
  11. return SwapMemoryWithContext(context.Background())
  12. }
  13. func SwapMemoryWithContext(ctx context.Context) (*SwapMemoryStat, error) {
  14. root := os.Getenv("HOST_ROOT")
  15. m, err := stats.ReadMemStats(ctx, stats.WithRootDir(root))
  16. if err != nil {
  17. return nil, err
  18. }
  19. u := 0.0
  20. if m.SwapPages.Avail != 0 {
  21. u = float64(m.SwapPages.Used) / float64(m.SwapPages.Avail) * 100.0
  22. }
  23. return &SwapMemoryStat{
  24. Total: uint64(m.SwapPages.Avail * m.PageSize),
  25. Used: uint64(m.SwapPages.Used * m.PageSize),
  26. Free: uint64(m.SwapPages.Free() * m.PageSize),
  27. UsedPercent: u,
  28. }, nil
  29. }
  30. func VirtualMemory() (*VirtualMemoryStat, error) {
  31. return VirtualMemoryWithContext(context.Background())
  32. }
  33. func VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) {
  34. root := os.Getenv("HOST_ROOT")
  35. m, err := stats.ReadMemStats(ctx, stats.WithRootDir(root))
  36. if err != nil {
  37. return nil, err
  38. }
  39. u := 0.0
  40. if m.UserPages.Avail != 0 {
  41. u = float64(m.UserPages.Used) / float64(m.UserPages.Avail) * 100.0
  42. }
  43. return &VirtualMemoryStat{
  44. Total: uint64(m.Total),
  45. Available: uint64(m.UserPages.Free() * m.PageSize),
  46. Used: uint64(m.UserPages.Used * m.PageSize),
  47. UsedPercent: u,
  48. Free: uint64(m.UserPages.Free() * m.PageSize),
  49. SwapTotal: uint64(m.SwapPages.Avail * m.PageSize),
  50. SwapFree: uint64(m.SwapPages.Free() * m.PageSize),
  51. }, nil
  52. }
  53. func SwapDevices() ([]*SwapDevice, error) {
  54. return SwapDevicesWithContext(context.Background())
  55. }
  56. func SwapDevicesWithContext(ctx context.Context) ([]*SwapDevice, error) {
  57. return nil, common.ErrNotImplementedError
  58. }