log.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from flask import Blueprint
  4. from flask import request
  5. import jimit as ji
  6. import json
  7. from models import Log
  8. from models import Rules
  9. from models import Utils
  10. __author__ = 'James Iter'
  11. __date__ = '2017/4/8'
  12. __contact__ = 'james.iter.cn@gmail.com'
  13. __copyright__ = '(c) 2017 by James Iter.'
  14. blueprint = Blueprint(
  15. 'log',
  16. __name__,
  17. url_prefix='/api/log'
  18. )
  19. blueprints = Blueprint(
  20. 'logs',
  21. __name__,
  22. url_prefix='/api/logs'
  23. )
  24. @Utils.dumps2response
  25. def r_get_by_filter():
  26. page = str(request.args.get('page', 1))
  27. page_size = str(request.args.get('page_size', 50))
  28. args_rules = [
  29. Rules.PAGE.value,
  30. Rules.PAGE_SIZE.value
  31. ]
  32. try:
  33. ji.Check.previewing(args_rules, {'page': page, 'page_size': page_size})
  34. except ji.PreviewingError, e:
  35. return json.loads(e.message)
  36. page = int(page)
  37. page_size = int(page_size)
  38. # 把page和page_size换算成offset和limit
  39. offset = (page - 1) * page_size
  40. # offset, limit将覆盖page及page_size的影响
  41. offset = str(request.args.get('offset', offset))
  42. limit = str(request.args.get('limit', page_size))
  43. order_by = request.args.get('order_by', 'id')
  44. order = request.args.get('order', 'asc')
  45. filter_str = request.args.get('filter', '')
  46. args_rules = [
  47. Rules.OFFSET.value,
  48. Rules.LIMIT.value,
  49. Rules.ORDER_BY.value,
  50. Rules.ORDER.value
  51. ]
  52. try:
  53. ji.Check.previewing(args_rules, {'offset': offset, 'limit': limit, 'order_by': order_by, 'order': order})
  54. offset = int(offset)
  55. limit = int(limit)
  56. ret = dict()
  57. ret['state'] = ji.Common.exchange_state(20000)
  58. ret['data'] = list()
  59. ret['paging'] = {'total': 0, 'offset': offset, 'limit': limit, 'page': page, 'page_size': page_size,
  60. 'next': '', 'prev': '', 'first': '', 'last': ''}
  61. ret['data'], ret['paging']['total'] = Log.get_by_filter(offset=offset, limit=limit, order_by=order_by,
  62. order=order, filter_str=filter_str)
  63. host_url = request.host_url.rstrip('/')
  64. other_str = '&filter=' + filter_str + '&order=' + order + '&order_by=' + order_by
  65. last_pagination = (ret['paging']['total'] + page_size - 1) / page_size
  66. if page <= 1:
  67. ret['paging']['prev'] = host_url + blueprints.url_prefix + '?page=1&page_size=' + page_size.__str__() + \
  68. other_str
  69. else:
  70. ret['paging']['prev'] = host_url + blueprints.url_prefix + '?page=' + str(page-1) + '&page_size=' + \
  71. page_size.__str__() + other_str
  72. if page >= last_pagination:
  73. ret['paging']['next'] = host_url + blueprints.url_prefix + '?page=' + last_pagination.__str__() + \
  74. '&page_size=' + page_size.__str__() + other_str
  75. else:
  76. ret['paging']['next'] = host_url + blueprints.url_prefix + '?page=' + str(page+1) + '&page_size=' + \
  77. page_size.__str__() + other_str
  78. ret['paging']['first'] = host_url + blueprints.url_prefix + '?page=1&page_size=' + \
  79. page_size.__str__() + other_str
  80. ret['paging']['last'] = \
  81. host_url + blueprints.url_prefix + '?page=' + last_pagination.__str__() + '&page_size=' + \
  82. page_size.__str__() + other_str
  83. return ret
  84. except ji.PreviewingError, e:
  85. return json.loads(e.message)
  86. @Utils.dumps2response
  87. @Utils.superuser
  88. def r_content_search():
  89. page = str(request.args.get('page', 1))
  90. page_size = str(request.args.get('page_size', 50))
  91. args_rules = [
  92. Rules.PAGE.value,
  93. Rules.PAGE_SIZE.value
  94. ]
  95. try:
  96. ji.Check.previewing(args_rules, {'page': page, 'page_size': page_size})
  97. except ji.PreviewingError, e:
  98. return json.loads(e.message)
  99. page = int(page)
  100. page_size = int(page_size)
  101. # 把page和page_size换算成offset和limit
  102. offset = (page - 1) * page_size
  103. # offset, limit将覆盖page及page_size的影响
  104. offset = str(request.args.get('offset', offset))
  105. limit = str(request.args.get('limit', page_size))
  106. order_by = request.args.get('order_by', 'id')
  107. order = request.args.get('order', 'asc')
  108. keyword = request.args.get('keyword', '')
  109. args_rules = [
  110. Rules.OFFSET.value,
  111. Rules.LIMIT.value,
  112. Rules.ORDER_BY.value,
  113. Rules.ORDER.value,
  114. Rules.KEYWORD.value
  115. ]
  116. try:
  117. ji.Check.previewing(args_rules, {'offset': offset, 'limit': limit, 'order_by': order_by, 'order': order,
  118. 'keyword': keyword})
  119. offset = int(offset)
  120. limit = int(limit)
  121. ret = dict()
  122. ret['state'] = ji.Common.exchange_state(20000)
  123. ret['data'] = list()
  124. ret['paging'] = {'total': 0, 'offset': offset, 'limit': limit, 'page': page, 'page_size': page_size}
  125. ret['data'], ret['paging']['total'] = Log.content_search(offset=offset, limit=limit, order_by=order_by,
  126. order=order, keyword=keyword)
  127. host_url = request.host_url.rstrip('/')
  128. other_str = '&keyword=' + keyword + '&order=' + order + '&order_by=' + order_by
  129. last_pagination = (ret['paging']['total'] + page_size - 1) / page_size
  130. if page <= 1:
  131. ret['paging']['prev'] = host_url + blueprints.url_prefix + '/_search?page=1&page_size=' + \
  132. page_size.__str__() + other_str
  133. else:
  134. ret['paging']['prev'] = host_url + blueprints.url_prefix + '/_search?page=' + str(page-1) + \
  135. '&page_size=' + page_size.__str__() + other_str
  136. if page >= last_pagination:
  137. ret['paging']['next'] = host_url + blueprints.url_prefix + '/_search?page=' + last_pagination.__str__() + \
  138. '&page_size=' + page_size.__str__() + other_str
  139. else:
  140. ret['paging']['next'] = host_url + blueprints.url_prefix + '/_search?page=' + str(page+1) + \
  141. '&page_size=' + page_size.__str__() + other_str
  142. ret['paging']['first'] = host_url + blueprints.url_prefix + '/_search?page=1&page_size=' + \
  143. page_size.__str__() + other_str
  144. ret['paging']['last'] = \
  145. host_url + blueprints.url_prefix + '/_search?page=' + last_pagination.__str__() + '&page_size=' + \
  146. page_size.__str__() + other_str
  147. return ret
  148. except ji.PreviewingError, e:
  149. return json.loads(e.message)