YarnClient.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import json
  2. from typing import List, Dict
  3. import requests
  4. from util import dateutil
  5. class YarnClient(object):
  6. def __init__(self, cluster_ip: str):
  7. self.cluster_ip = cluster_ip
  8. def get_apps(self, queue="",
  9. finished_time_begin=0,
  10. finished_time_end=0,
  11. started_time_begin=0,
  12. started_time_end=0,
  13. limit=10) -> List[Dict]:
  14. query_str = f"limit=&{limit}"
  15. if queue != "":
  16. query_str = f"{query_str}&queue={queue}"
  17. if finished_time_end > 0:
  18. query_str = f"{query_str}&finishedTimeBegin={finished_time_begin}"
  19. if finished_time_end > 0:
  20. query_str = f"{query_str}&finishedTimeEnd={finished_time_end}"
  21. if started_time_begin > 0:
  22. query_str = f"{query_str}&startedTimeBegin={started_time_begin}"
  23. if started_time_end > 0:
  24. query_str = f"{query_str}&startedTimeEnd={started_time_end}"
  25. url = f"http://{self.cluster_ip}:8088/ws/v1/cluster/apps?{query_str}"
  26. response = requests.get(url)
  27. res = json.loads(response.text)
  28. result = []
  29. for app in res['apps']['app']:
  30. item = {
  31. "id": app['id'],
  32. "name": app['name'],
  33. "finalStatus": app['finalStatus'],
  34. "finishedTime": dateutil.ts_cover_str(app['finishedTime']),
  35. "startedTime": dateutil.ts_cover_str(app['startedTime']),
  36. "launchTime": dateutil.ts_cover_str(app['launchTime']),
  37. "queue": app['queue'],
  38. "state": app['state'],
  39. "elapsedTime": app['elapsedTime'],
  40. }
  41. result.append(item)
  42. return result