remove_service_progress.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import datetime
  4. import os
  5. import sys
  6. import time
  7. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'configs.production')
  8. PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
  9. sys.path.insert(0, PROJECT_ROOT)
  10. from script.base import init_env, get_logger
  11. init_env(interactive = False)
  12. logger = get_logger(__name__)
  13. from apilib.utils_mongo import BulkHandlerEx
  14. from apps.web.constant import Const
  15. from apps.web.user.models import ServiceProgress
  16. def remove_serviceProgress_periodically():
  17. threeDaysAgo = datetime.datetime.now() - datetime.timedelta(days = 3)
  18. threeDaysAgo = int(time.mktime(threeDaysAgo.timetuple()))
  19. threeMonthAgo = datetime.datetime.now() - datetime.timedelta(days = 91)
  20. threeMonthAgo = int(time.mktime(threeMonthAgo.timetuple()))
  21. start_time = int(time.time())
  22. while True:
  23. now_time = int(time.time())
  24. if now_time - start_time > 2 * 60 * 60:
  25. logger.debug('time is over. wait next.')
  26. return
  27. items = ServiceProgress.get_collection().find(
  28. {
  29. '$or': [{'finished_time': {'$lt': threeDaysAgo}}, {'isFinished': True}],
  30. 'devTypeCode': {
  31. '$ne': Const.DEVICE_TYPE_CODE_HP_GATE
  32. }}, {'_id': 1}).limit(2000)
  33. bulker = BulkHandlerEx(ServiceProgress.get_collection())
  34. for item in items:
  35. bulker.delete(query_dict = {'_id': item['_id']})
  36. count = len(bulker.requests)
  37. if count > 0:
  38. logger.debug('prepare to delete {} rows.'.format(count))
  39. bulker.execute()
  40. bulker = BulkHandlerEx(ServiceProgress.get_collection()) # type: BulkHandlerEx
  41. if count < 2000:
  42. break
  43. while True:
  44. now_time = int(time.time())
  45. if now_time - start_time > 2 * 60 * 60:
  46. logger.debug('time is over. wait next.')
  47. return
  48. items = ServiceProgress.get_collection().find(
  49. {
  50. '$or': [
  51. {'finished_time': {'$lt': threeMonthAgo}},
  52. {'isFinished': True}
  53. ],
  54. 'finished_time': {'$lt': threeDaysAgo},
  55. 'devTypeCode': Const.DEVICE_TYPE_CODE_HP_GATE
  56. }, {'_id': 1}).limit(2000)
  57. bulker = BulkHandlerEx(ServiceProgress.get_collection()) # type: BulkHandlerEx
  58. for item in items:
  59. bulker.delete(query_dict = {'_id': item['_id']})
  60. count = len(bulker.requests)
  61. if count > 0:
  62. logger.debug('prepare to delete {} rows.'.format(count))
  63. bulker.execute()
  64. bulker = BulkHandlerEx(ServiceProgress.get_collection()) # type: BulkHandlerEx
  65. if count < 2000:
  66. break
  67. logger.debug('delete all over.')
  68. remove_serviceProgress_periodically()