config.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. """
  4. celery的配置文件
  5. apps.tasks.config
  6. ~~~~~~~~~~~~~~~~~
  7. """
  8. import os
  9. from os.path import join, abspath
  10. from dotenv import get_key, load_dotenv
  11. from celery.schedules import crontab
  12. base_dir = os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/..")
  13. task_dir = join(base_dir, 'taskmanager')
  14. dotenv_path = abspath(join(base_dir, '.env.%s' % os.environ.get('MY_ENV')))
  15. load_dotenv(dotenv_path)
  16. def env(key):
  17. return get_key(dotenv_path, key)
  18. # ========== broker settings ===========
  19. #: broker url
  20. BROKER_URL = env('CELERY_BROKER_URL')
  21. # : 指定接受的内容类型
  22. CELERY_ACCEPT_CONTENT = ['json', 'msgpack']
  23. # ========== celery settings ===========
  24. MY_CELERY_QUEUE = "manyi_celery"
  25. MY_CELERY_ROUTING_KEY = "manyi_celery"
  26. POLL_RECHARGE_RECORD_QUEUE = 'manyi_poll_recharge_record'
  27. POLL_RECHARGE_RECORD_QUEUE_KEY = 'manyi_poll_recharge_record'
  28. DEALER_DATA_ANYLYSE_QUEUE = 'manyi_dealer_data_anylyse'
  29. DEALER_DATA_ANYLYSE_QUEUE_KEY = 'manyi_dealer_data_anylyse'
  30. # 设备离线的延时任务 安全起见这个地方仅仅区里发送任务的通知 不要访问数据库 作为独立的单元处理
  31. DEVICE_OFFLINE_QUEUE = "manyi_device_offline"
  32. DEVICE_OFFLINE_QUEUE_KEY = "manyi_device_offline"
  33. OFFLINE_TASK_QUEUE = 'manyi_offline_task'
  34. OFFLINE_TASK_QUEUE_KEY = 'manyi_offline_task'
  35. REPORT_TASK_QUEUE = 'manyi_report_task'
  36. REPORT_TASK_QUEUE_KEY = 'manyi_report_task'
  37. CELERY_QUEUES = {
  38. MY_CELERY_ROUTING_KEY: {
  39. 'exchange': MY_CELERY_QUEUE,
  40. 'exchange_type': 'direct',
  41. 'binding_key': MY_CELERY_ROUTING_KEY
  42. },
  43. POLL_RECHARGE_RECORD_QUEUE: {
  44. 'exchange': POLL_RECHARGE_RECORD_QUEUE,
  45. 'exchange_type': 'direct',
  46. 'binding_key': POLL_RECHARGE_RECORD_QUEUE_KEY
  47. },
  48. DEALER_DATA_ANYLYSE_QUEUE: {
  49. 'exchange': DEALER_DATA_ANYLYSE_QUEUE,
  50. 'exchange_type': 'direct',
  51. 'binding_key': DEALER_DATA_ANYLYSE_QUEUE_KEY
  52. },
  53. DEVICE_OFFLINE_QUEUE: {
  54. 'exchange': DEVICE_OFFLINE_QUEUE,
  55. 'exchange_type': 'direct',
  56. 'binding_key': DEVICE_OFFLINE_QUEUE_KEY
  57. },
  58. OFFLINE_TASK_QUEUE: {
  59. 'exchange': OFFLINE_TASK_QUEUE,
  60. 'exchange_type': 'direct',
  61. 'binding_key': OFFLINE_TASK_QUEUE_KEY
  62. },
  63. REPORT_TASK_QUEUE: {
  64. 'exchange': REPORT_TASK_QUEUE,
  65. 'exchange_type': 'direct',
  66. 'binding_key': REPORT_TASK_QUEUE_KEY
  67. }
  68. }
  69. CELERY_ROUTES = {
  70. 'tasks.device_offline_notify': {
  71. 'queue': DEVICE_OFFLINE_QUEUE,
  72. 'routing_key': DEVICE_OFFLINE_QUEUE_KEY
  73. },
  74. 'tasks.report_new_payment_to_dealer_via_wechat': {
  75. 'queue': MY_CELERY_QUEUE,
  76. 'routing_key': MY_CELERY_ROUTING_KEY
  77. },
  78. 'tasks.report_service_complete_to_user_via_wechat': {
  79. 'queue': MY_CELERY_QUEUE,
  80. 'routing_key': MY_CELERY_ROUTING_KEY
  81. },
  82. 'tasks.add': {
  83. 'queue': MY_CELERY_QUEUE,
  84. 'routing_key': MY_CELERY_ROUTING_KEY
  85. },
  86. 'tasks.report_to_user_via_wechat': {
  87. 'queue': MY_CELERY_QUEUE,
  88. 'routing_key': MY_CELERY_ROUTING_KEY
  89. },
  90. 'tasks.send_msg_to_user_via_wechat': {
  91. 'queue': MY_CELERY_QUEUE,
  92. 'routing_key': MY_CELERY_ROUTING_KEY
  93. },
  94. 'tasks.report_to_dealer_via_wechat': {
  95. 'queue': MY_CELERY_QUEUE,
  96. 'routing_key': MY_CELERY_ROUTING_KEY
  97. },
  98. 'tasks.report_feedback_to_dealer_via_wechat': {
  99. 'queue': MY_CELERY_QUEUE,
  100. 'routing_key': MY_CELERY_ROUTING_KEY
  101. },
  102. 'tasks.send_topic_command': {
  103. 'queue': MY_CELERY_QUEUE,
  104. 'routing_key': MY_CELERY_ROUTING_KEY
  105. },
  106. 'tasks.send_to_xf_falut': {
  107. 'queue': MY_CELERY_QUEUE,
  108. 'routing_key': MY_CELERY_ROUTING_KEY
  109. },
  110. 'tasks.generate_simCharge_excel_report': {
  111. 'queue': REPORT_TASK_QUEUE,
  112. 'routing_key': REPORT_TASK_QUEUE_KEY
  113. },
  114. 'tasks.generate_dealerWithDraw_excel_report': {
  115. 'queue': REPORT_TASK_QUEUE,
  116. 'routing_key': REPORT_TASK_QUEUE_KEY
  117. },
  118. 'tasks.generate_biz_stats_for_manager': {
  119. 'queue': REPORT_TASK_QUEUE,
  120. 'routing_key': REPORT_TASK_QUEUE_KEY
  121. },
  122. 'tasks.generate_business_stats_report_by_dealer': {
  123. 'queue': REPORT_TASK_QUEUE,
  124. 'routing_key': REPORT_TASK_QUEUE_KEY
  125. },
  126. 'tasks.export_charge_order_excel_from_db': {
  127. 'queue': REPORT_TASK_QUEUE,
  128. 'routing_key': REPORT_TASK_QUEUE_KEY
  129. },
  130. 'tasks.export_consume_order_excel_from_db': {
  131. 'queue': REPORT_TASK_QUEUE,
  132. 'routing_key': REPORT_TASK_QUEUE_KEY
  133. },
  134. 'tasks.export_send_coins_to_card_order_excel_from_db': {
  135. 'queue': REPORT_TASK_QUEUE,
  136. 'routing_key': REPORT_TASK_QUEUE_KEY
  137. },
  138. 'tasks.export_on_points_order_excel_from_db': {
  139. 'queue': REPORT_TASK_QUEUE,
  140. 'routing_key': REPORT_TASK_QUEUE_KEY
  141. },
  142. 'tasks.export_API_order_excel_from_db': {
  143. 'queue': REPORT_TASK_QUEUE,
  144. 'routing_key': REPORT_TASK_QUEUE_KEY
  145. },
  146. 'tasks.export_group_stat_excel_from_db': {
  147. 'queue': REPORT_TASK_QUEUE,
  148. 'routing_key': REPORT_TASK_QUEUE_KEY
  149. },
  150. 'tasks.export_vcard_info_excel_from_db': {
  151. 'queue': REPORT_TASK_QUEUE,
  152. 'routing_key': REPORT_TASK_QUEUE_KEY
  153. },
  154. 'tasks.export_aggregate_dealer_income': {
  155. 'queue': REPORT_TASK_QUEUE,
  156. 'routing_key': REPORT_TASK_QUEUE_KEY
  157. },
  158. 'tasks.import_simcard_excel_to_db': {
  159. 'queue': OFFLINE_TASK_QUEUE,
  160. 'routing_key': OFFLINE_TASK_QUEUE_KEY
  161. },
  162. 'tasks.export_simcard_excel_from_db': {
  163. 'queue': OFFLINE_TASK_QUEUE,
  164. 'routing_key': OFFLINE_TASK_QUEUE_KEY
  165. },
  166. 'tasks.export_device_excel_from_db': {
  167. 'queue': REPORT_TASK_QUEUE,
  168. 'routing_key': REPORT_TASK_QUEUE_KEY
  169. },
  170. 'tasks.poll_dealer_recharge_record': {
  171. 'queue': POLL_RECHARGE_RECORD_QUEUE,
  172. 'routing_key': POLL_RECHARGE_RECORD_QUEUE_KEY
  173. },
  174. 'tasks.poll_user_recharge_record': {
  175. 'queue': POLL_RECHARGE_RECORD_QUEUE,
  176. 'routing_key': POLL_RECHARGE_RECORD_QUEUE_KEY
  177. },
  178. 'tasks.manager_export_charge_order_excel_from_db': {
  179. 'queue': REPORT_TASK_QUEUE,
  180. 'routing_key': REPORT_TASK_QUEUE_KEY
  181. },
  182. 'tasks.manager_export_dealer_info_excel_from_db': {
  183. 'queue': REPORT_TASK_QUEUE,
  184. 'routing_key': REPORT_TASK_QUEUE_KEY
  185. },
  186. 'tasks.manager_export_consume_order_excel_from_db': {
  187. 'queue': REPORT_TASK_QUEUE,
  188. 'routing_key': REPORT_TASK_QUEUE_KEY
  189. },
  190. 'tasks.batch_set_device_params': {
  191. 'queue': OFFLINE_TASK_QUEUE,
  192. 'routing_key': OFFLINE_TASK_QUEUE_KEY
  193. },
  194. 'tasks.set_device_params': {
  195. 'queue': OFFLINE_TASK_QUEUE,
  196. 'routing_key': OFFLINE_TASK_QUEUE_KEY
  197. },
  198. 'tasks.batch_set_server_settings': {
  199. 'queue': OFFLINE_TASK_QUEUE,
  200. 'routing_key': OFFLINE_TASK_QUEUE_KEY
  201. },
  202. 'tasks.set_server_settings': {
  203. 'queue': OFFLINE_TASK_QUEUE,
  204. 'routing_key': OFFLINE_TASK_QUEUE_KEY
  205. },
  206. }
  207. CELERYBEAT_SCHEDULE = {
  208. 'remove_serviceProgress_periodically': {
  209. 'task': 'tasks.remove_serviceProgress_periodically',
  210. 'schedule': crontab(minute=0, hour=2),
  211. 'options': {
  212. 'queue': MY_CELERY_QUEUE,
  213. 'routing_key': MY_CELERY_ROUTING_KEY
  214. }
  215. },
  216. 'handle_customer_complaints_yesterday': {
  217. 'task': 'tasks.handle_customer_complaints_yesterday',
  218. 'schedule': crontab(minute=0, hour=3),
  219. 'options': {
  220. 'queue': MY_CELERY_QUEUE,
  221. 'routing_key': MY_CELERY_ROUTING_KEY
  222. }
  223. },
  224. 'send_SIM_expired_messages_by_sms': {
  225. 'task': 'tasks.send_SIM_expired_messages',
  226. 'schedule': crontab(day_of_month='1,6,11,19,23,25,26', minute = 0, hour = 10),
  227. 'options': {
  228. 'queue': MY_CELERY_QUEUE,
  229. 'routing_key': MY_CELERY_ROUTING_KEY
  230. },
  231. 'args': ('sms',)
  232. },
  233. 'send_SIM_expired_messages_by_wechat': {
  234. 'task': 'tasks.send_SIM_expired_messages',
  235. 'schedule': crontab(day_of_month = '1,6,11,19,23,25,26', minute = 0, hour = 20),
  236. 'options': {
  237. 'queue': MY_CELERY_QUEUE,
  238. 'routing_key': MY_CELERY_ROUTING_KEY
  239. },
  240. 'args': ('wechat',)
  241. },
  242. 'calc_dealer_user_count': {
  243. 'task': 'tasks.calc_dealer_user_count',
  244. 'schedule': crontab(minute = 30, hour = 0, day_of_week = 'fri'),
  245. 'options': {
  246. 'queue': DEALER_DATA_ANYLYSE_QUEUE,
  247. 'routing_key': DEALER_DATA_ANYLYSE_QUEUE_KEY
  248. }
  249. },
  250. 'generate_manager_map_options': {
  251. 'task': 'tasks.generate_manager_map_options',
  252. 'schedule': crontab(minute = 0, hour = 1),
  253. 'options': {
  254. 'queue': MY_CELERY_QUEUE,
  255. 'routing_key': MY_CELERY_ROUTING_KEY
  256. }
  257. },
  258. 'check_withdraw_via_bank': {
  259. 'task': 'tasks.check_withdraw_via_bank',
  260. 'schedule': crontab(minute = 0, hour = 2),
  261. 'options': {
  262. 'queue': POLL_RECHARGE_RECORD_QUEUE,
  263. 'routing_key': POLL_RECHARGE_RECORD_QUEUE_KEY
  264. }
  265. },
  266. 'check_and_retry_withdraw': {
  267. 'task': 'tasks.check_and_retry_withdraw',
  268. 'schedule': crontab(minute = 0, hour = 4),
  269. 'options': {
  270. 'queue': POLL_RECHARGE_RECORD_QUEUE,
  271. 'routing_key': POLL_RECHARGE_RECORD_QUEUE_KEY
  272. }
  273. },
  274. # 每日晚上凌晨2点生成订单
  275. "gen_daily_rent_order": {
  276. "task": "tasks.gen_daily_rent_order",
  277. "schedule": crontab(minute=0, hour=2),
  278. "options": {
  279. 'queue': MY_CELERY_QUEUE,
  280. 'routing_key': MY_CELERY_ROUTING_KEY
  281. }
  282. },
  283. # 每日下午3点进行订单扣款
  284. "deduct_rent_order": {
  285. "task": "tasks.deduct_rent_order",
  286. "schedule": crontab(minute=0, hour=15),
  287. "options": {
  288. 'queue': MY_CELERY_QUEUE,
  289. 'routing_key': MY_CELERY_ROUTING_KEY
  290. }
  291. },
  292. # 每日统计
  293. "ledger_consume_order_stats": {
  294. "task": "tasks.ledger_consume_order_stats",
  295. "schedule": crontab(hour=1, minute=0),
  296. "options": {
  297. 'queue': MY_CELERY_QUEUE,
  298. 'routing_key': MY_CELERY_ROUTING_KEY
  299. }
  300. },
  301. # 每天凌晨 1 点 对于退款订单进行一次拉取信息
  302. 'pull_refund_order': {
  303. 'task': 'tasks.pull_refund_order',
  304. 'schedule': crontab(minute=0, hour=1),
  305. 'options': {
  306. 'queue': MY_CELERY_QUEUE,
  307. 'routing_key': MY_CELERY_ROUTING_KEY
  308. }
  309. },
  310. # 每天凌晨 2 点 运行一次经销商的自动提现
  311. 'dealer_auto_withdraw': {
  312. 'task': 'tasks.dealer_auto_withdraw',
  313. # 每个月1号执行任务
  314. 'schedule': crontab(minute=0, hour=2),
  315. 'options': {
  316. 'queue': MY_CELERY_QUEUE,
  317. 'routing_key': MY_CELERY_ROUTING_KEY
  318. }
  319. },
  320. 'sum_customer': {
  321. 'task': 'tasks.sum_customer',
  322. # 每个月1号执行任务
  323. 'schedule': crontab(minute = 0, hour = 0, day_of_month = 1),
  324. 'options': {
  325. 'queue': MY_CELERY_QUEUE,
  326. 'routing_key': MY_CELERY_ROUTING_KEY
  327. }
  328. },
  329. 'make_rpt_into_db': {
  330. 'task': 'tasks.make_rpt_into_db',
  331. 'schedule': crontab(minute = 30, hour = 2),
  332. 'options': {
  333. 'queue': MY_CELERY_QUEUE,
  334. 'routing_key': MY_CELERY_ROUTING_KEY
  335. }
  336. },
  337. }
  338. CELERY_ENABLE_UTC = True
  339. CELERY_TIMEZONE = "Asia/Shanghai"
  340. CELERY_IGNORE_RESULT = True
  341. # : 任务序列化和反序列化使用msgpack方案
  342. CELERY_TASK_SERIALIZER = 'msgpack'
  343. # : 读取任务结果一般性能要求不高,所以使用了可读性更好的JSON
  344. CELERY_RESULT_SERIALIZER = 'json'
  345. # Decides if publishing task messages will be retried in the case of connection loss or other connection errors
  346. CELERY_TASK_PUBLISH_RETRY = False
  347. # :每个worker处理的最大任务数量 超过任务数量直接销毁, 同时释放内存
  348. CELERYD_MAX_TASKS_PER_CHILD = 100
  349. # : 任务过期时间,不建议直接写86400,应该让这样的magic数字表述更明显
  350. CELERY_TASK_RESULT_EXPIRES = 60 * 60 * 24
  351. #: 结果储存
  352. CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND')
  353. CELERYD_LOG_FORMAT = '[%(asctime)s] %(levelname)s[%(processName)s] %(module)s [%(name)s:%(lineno)d]: %(message)s'
  354. CELERYD_TASK_LOG_FORMAT = '[%(asctime)s] %(levelname)s[%(processName)s] %(module)s [%(name)s:%(lineno)d]:' \
  355. ' [%(task_name)s(%(task_id)s)] %(message)s'