/biz/handlers/asset_operational_audit_handler.py

https://github.com/opendevops-cn/codo-cmdb · Python · 67 lines · 50 code · 11 blank · 6 comment · 8 complexity · e8285c83fa784fc9fc7a992450fc15c8 MD5 · raw file

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # @File : asset_operational_audit_handler.py
  4. # @Author: Fred Yangxiaofei
  5. # @Date : 2019/9/11
  6. # @Role : 资产操作记录
  7. import json
  8. from sqlalchemy import or_
  9. from libs.base_handler import BaseHandler
  10. from models.server import model_to_dict, AssetOperationalAudit
  11. from websdk.db_context import DBContext
  12. import tornado.web
  13. import time, datetime
  14. from dateutil.relativedelta import relativedelta
  15. class AssetOperationalAuditHandler(tornado.web.RequestHandler):
  16. def get(self, *args, **kwargs):
  17. id = self.get_argument('id', default=None, strip=True)
  18. page_size = self.get_argument('page', default=1, strip=True)
  19. limit = self.get_argument('limit', default=10, strip=True)
  20. key = self.get_argument('key', default=None, strip=True)
  21. value = self.get_argument('value', default=None, strip=True)
  22. start_date = self.get_argument('start_date', default=None, strip=True)
  23. end_date = self.get_argument('end_date', default=None, strip=True)
  24. limit_start = (int(page_size) - 1) * int(limit)
  25. if not start_date:
  26. start_date = datetime.date.today() - relativedelta(months=+1)
  27. if not end_date:
  28. end_date = datetime.date.today() + datetime.timedelta(days=1)
  29. start_time_tuple = time.strptime(str(start_date), '%Y-%m-%d')
  30. end_time_tuple = time.strptime(str(end_date), '%Y-%m-%d')
  31. log_list = []
  32. with DBContext('r') as session:
  33. if id:
  34. count = session.query(AssetOperationalAudit).filter(AssetOperationalAudit.id == id).count()
  35. log_info = session.query(AssetOperationalAudit).filter(AssetOperationalAudit.id == id).all()
  36. elif key and value:
  37. count = session.query(AssetOperationalAudit).filter(AssetOperationalAudit.ctime > start_time_tuple,
  38. AssetOperationalAudit.ctime < end_time_tuple).filter_by(
  39. **{key: value}).count()
  40. log_info = session.query(AssetOperationalAudit).filter(AssetOperationalAudit.ctime > start_time_tuple,
  41. AssetOperationalAudit.ctime < end_time_tuple).filter_by(
  42. **{key: value}).order_by(-AssetOperationalAudit.ctime)
  43. else:
  44. count = session.query(AssetOperationalAudit).filter(AssetOperationalAudit.ctime > start_time_tuple,
  45. AssetOperationalAudit.ctime < end_time_tuple).count()
  46. log_info = session.query(AssetOperationalAudit).filter(AssetOperationalAudit.ctime > start_time_tuple,
  47. AssetOperationalAudit.ctime < end_time_tuple).order_by(
  48. -AssetOperationalAudit.ctime).offset(limit_start).limit(int(limit))
  49. for msg in log_info:
  50. data_dict = model_to_dict(msg)
  51. data_dict['ctime'] = str(data_dict['ctime'])
  52. log_list.append(data_dict)
  53. return self.write(dict(code=0, msg='获取日志成功', count=count, data=log_list))
  54. asset_audit_urls = [
  55. (r"/v1/cmdb/operational_audit/", AssetOperationalAuditHandler)
  56. ]