quality_server.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. # coding:utf-8
  2. from a2s.a2s_server import simple_params, watch
  3. from a2s.tools import json_deserialize, json_serialize
  4. from app import check
  5. from docs.config import ReluMongodb
  6. from util.mogodb_helper import MongoDBInterface
  7. import time
  8. ReluClient = MongoDBInterface(ReluMongodb)
  9. Rules = {}
  10. ClearTime = 0
  11. def clear_timeout_rules():
  12. """
  13. 清理超时的规则
  14. """
  15. global Rules
  16. p_clear = []
  17. for rules_id, r in Rules.items():
  18. if time.time() - r["time"] > 5:
  19. p_clear.append(rules_id)
  20. for rules_id in p_clear:
  21. Rules.pop(rules_id)
  22. def get_rule(rules_id):
  23. """
  24. 获取规则
  25. """
  26. global Rules
  27. global ClearTime
  28. if time.time() - ClearTime > 5:
  29. clear_timeout_rules()
  30. ClearTime = time.time()
  31. if rules_id in Rules:
  32. return Rules[rules_id]["relus"]
  33. else:
  34. rule_row = ReluClient.find_relus(ReluMongodb["col"], rules_id)
  35. if rule_row:
  36. rules = rule_row.get("rules", {})
  37. Rules[rules_id] = {}
  38. Rules[rules_id]["time"] = int(time.time())
  39. Rules[rules_id]["relus"] = rules
  40. return rules
  41. return None
  42. @simple_params
  43. @watch
  44. def server_start(data: bytes, *args, **kwargs):
  45. data = json_deserialize(data)
  46. row = data.get("data", {})
  47. rules_id = data.get("rules_id", None)
  48. rules = get_rule(rules_id)
  49. if not rules or not row:
  50. data = {
  51. "code": 500,
  52. "msg": "失败:规则与检测数据不能为空",
  53. "data": {}
  54. }
  55. else:
  56. result = check(row, rules)
  57. data = {
  58. "code": 200,
  59. "msg": "成功",
  60. "data": result
  61. }
  62. return json_serialize(data)
  63. if __name__ == '__main__':
  64. server_start()
  65. # 本地启动服务
  66. # python -u quality_server.py -host 192.168.3.240 -port 19090 -subject test_quality_bid -queue main -manager_subject monitorRelease -server_host 127.0.0.1
  67. # server_start(host="192.168.3.240",port=19090,subject="test_quality_bid",queue="main")