oper_log_infer.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. """操作日志路径推断(中间件落库与查询兜底)"""
  2. from __future__ import annotations
  3. import re
  4. from typing import List, Tuple
  5. _ACTION_TYPE_MAP = {
  6. "add": 1,
  7. "create": 1,
  8. "insert": 1,
  9. "update": 2,
  10. "edit": 2,
  11. "modify": 2,
  12. "delete": 3,
  13. "remove": 3,
  14. "export": 5,
  15. "import": 6,
  16. "transfer": 2,
  17. "intopool": 2,
  18. "deal": 2,
  19. "claim": 2,
  20. "release": 2,
  21. "invalid": 2,
  22. "assign": 2,
  23. "sign": 2,
  24. "renew": 1,
  25. }
  26. _MODULE_TITLE_RULES: List[Tuple[re.Pattern[str], str]] = [
  27. (re.compile(r"/crm/customer", re.I), "CRM客户管理"),
  28. (re.compile(r"/crm/contact", re.I), "CRM联系人"),
  29. (re.compile(r"/crm/opportunity", re.I), "CRM商机管理"),
  30. (re.compile(r"/crm/contract", re.I), "CRM合同管理"),
  31. (re.compile(r"/crm/invoice-info", re.I), "CRM开票信息"),
  32. (re.compile(r"/crm/", re.I), "CRM管理"),
  33. (re.compile(r"/web/admin/", re.I), "系统管理"),
  34. (re.compile(r"/web/auth/", re.I), "认证授权"),
  35. (re.compile(r"/web/monitor/", re.I), "系统监控"),
  36. ]
  37. def title_from_path(path: str) -> str:
  38. for pattern, title in _MODULE_TITLE_RULES:
  39. if pattern.search(path or ""):
  40. return title
  41. parts = [p for p in (path or "").split("/") if p]
  42. return parts[-1] if parts else "操作日志"
  43. def business_type_from_path(path: str, http_method: str) -> int:
  44. parts = [p for p in (path or "").split("/") if p]
  45. if parts:
  46. last = parts[-1].lower()
  47. if last in _ACTION_TYPE_MAP:
  48. return _ACTION_TYPE_MAP[last]
  49. method = (http_method or "").upper()
  50. if method == "POST":
  51. return 1
  52. if method in ("PUT", "PATCH"):
  53. return 2
  54. if method == "DELETE":
  55. return 3
  56. return 0