api.py 2.1 KB

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