api.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #-*- coding:utf-8 -*-
  2. import json
  3. import requests
  4. from flask import request, abort, g
  5. from rrd import app, config
  6. #done, TODO:query by tags
  7. @app.route("/api/endpoints")
  8. def api_endpoints():
  9. ret = {
  10. "ok": False,
  11. "msg": "",
  12. "data": [],
  13. }
  14. q = request.args.get("q") or ""
  15. raw_tag = request.args.get("tags") or ""
  16. tags = raw_tag and [x.strip() for x in raw_tag.split(",")] or []
  17. limit = int(request.args.get("limit") or 100)
  18. if not q and not tags:
  19. ret["msg"] = "no query params given"
  20. return json.dumps(ret)
  21. r = requests.get(config.API_ADDR + "/graph/endpoint?q=%s&limit=%s&tags=%s" %(q, limit, tags))
  22. if r.status_code != 200:
  23. abort(400, r.text)
  24. j = sorted(r.json(), key=lambda x:x["endpoint"])
  25. endpoints = [x["endpoint"] for x in j]
  26. ret['data'] = j
  27. ret['ok'] = True
  28. return json.dumps(ret)
  29. #done
  30. @app.route("/api/counters", methods=["POST"])
  31. def api_get_counters():
  32. ret = {
  33. "ok": False,
  34. "msg": "",
  35. "data": [],
  36. }
  37. q = request.form.get("q") or ""
  38. limit = int(request.form.get("limit") or 100)
  39. eids = request.form.get("eids") or ""
  40. eids = eids and json.loads(eids) or []
  41. if not (eids or q):
  42. ret['msg'] = "no endpoints or counter given"
  43. return json.dumps(ret)
  44. r = requests.get(config.API_ADDR + "/graph/endpoint_counter?eid=%s&metricQuery=%s&limit=%s" %(",".join(eids), q, limit))
  45. if r.status_code != 200:
  46. abort(400, r.text)
  47. j = r.json()
  48. counters_map = {}
  49. for x in j:
  50. counters_map[x['counter']] = [x['counter'], x['type'], x['step']]
  51. sorted_counters = sorted(counters_map.keys())
  52. sorted_values = [counters_map[x] for x in sorted_counters]
  53. ret['data'] = sorted_values
  54. ret['ok'] = True
  55. return json.dumps(ret)