gpu_status.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import argparse
  2. from typing import Protocol
  3. import requests
  4. from renderer import Renderer
  5. parser = argparse.ArgumentParser(description="Prints the status of server nodes and their GPUs.")
  6. parser.add_argument(
  7. "-s",
  8. "--server",
  9. type=str,
  10. default="deimos",
  11. help="The name of the server to query."
  12. )
  13. parser.add_argument(
  14. "-p",
  15. "--port",
  16. type=str,
  17. default="8091",
  18. help="The port of the server to query.",
  19. )
  20. parser.add_argument(
  21. "-t",
  22. "--protocol",
  23. type=str,
  24. default="http",
  25. choices=("http", "https"),
  26. help="The protocol to use for the query.",
  27. )
  28. parser.add_argument(
  29. "-c",
  30. "--compact",
  31. action="store_true",
  32. help="Flag; if set, a compact overview will be displayed."
  33. )
  34. parser.add_argument(
  35. "-uc",
  36. "--ultracompact",
  37. action="store_true",
  38. help="Flag; if set, a very compact overview will be displayed."
  39. )
  40. parser.add_argument(
  41. "-u",
  42. "--users",
  43. action="store_true",
  44. help="Flag; if set, the current users of each GPU will be displayed."
  45. )
  46. parser.add_argument(
  47. "-f",
  48. "--filter",
  49. type=str,
  50. nargs="*",
  51. default=None,
  52. help="The node names of nodes to filter for."
  53. )
  54. args = parser.parse_args()
  55. response = requests.get(
  56. f"{args.protocol}://{args.server}:{args.port}/api/clients/"
  57. )
  58. if args.ultracompact:
  59. renderer = Renderer(
  60. columns=3,
  61. progress_bar_width=30,
  62. use_space_lines=False,
  63. node_names=args.filter,
  64. display_power=False,
  65. display_users=args.users,
  66. )
  67. elif args.compact:
  68. renderer = Renderer(
  69. columns=2,
  70. progress_bar_width=40,
  71. use_space_lines=False,
  72. node_names=args.filter,
  73. display_power=True,
  74. display_users=args.users,
  75. )
  76. else:
  77. renderer = Renderer(
  78. columns=1,
  79. progress_bar_width=50,
  80. use_space_lines=True,
  81. node_names=args.filter,
  82. display_users=args.users,
  83. )
  84. print(renderer.render_info_dict(response.json()))