YarnClient.py 1.6 KB

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