| 
									
										
										
										
											2024-01-02 15:29:18 +08:00
										 |  |  | from datetime import timedelta | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-08 17:12:09 +08:00
										 |  |  | import pytz | 
					
						
							| 
									
										
										
										
											2024-12-24 18:38:51 +08:00
										 |  |  | from celery import Celery, Task  # type: ignore | 
					
						
							|  |  |  | from celery.schedules import crontab  # type: ignore | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-22 11:01:32 +08:00
										 |  |  | from configs import dify_config | 
					
						
							| 
									
										
										
										
											2024-11-30 23:05:22 +08:00
										 |  |  | from dify_app import DifyApp | 
					
						
							| 
									
										
										
										
											2024-10-22 11:01:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-30 23:05:22 +08:00
										 |  |  | def init_app(app: DifyApp) -> Celery: | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |     class FlaskTask(Task): | 
					
						
							|  |  |  |         def __call__(self, *args: object, **kwargs: object) -> object: | 
					
						
							|  |  |  |             with app.app_context(): | 
					
						
							|  |  |  |                 return self.run(*args, **kwargs) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-08 13:23:51 +08:00
										 |  |  |     broker_transport_options = {} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-22 11:01:32 +08:00
										 |  |  |     if dify_config.CELERY_USE_SENTINEL: | 
					
						
							| 
									
										
										
										
											2024-09-08 13:23:51 +08:00
										 |  |  |         broker_transport_options = { | 
					
						
							| 
									
										
										
										
											2024-10-22 11:01:32 +08:00
										 |  |  |             "master_name": dify_config.CELERY_SENTINEL_MASTER_NAME, | 
					
						
							| 
									
										
										
										
											2024-09-08 13:23:51 +08:00
										 |  |  |             "sentinel_kwargs": { | 
					
						
							| 
									
										
										
										
											2024-10-22 11:01:32 +08:00
										 |  |  |                 "socket_timeout": dify_config.CELERY_SENTINEL_SOCKET_TIMEOUT, | 
					
						
							| 
									
										
										
										
											2024-09-08 13:23:51 +08:00
										 |  |  |             }, | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |     celery_app = Celery( | 
					
						
							|  |  |  |         app.name, | 
					
						
							|  |  |  |         task_cls=FlaskTask, | 
					
						
							| 
									
										
										
										
											2024-10-22 11:01:32 +08:00
										 |  |  |         broker=dify_config.CELERY_BROKER_URL, | 
					
						
							|  |  |  |         backend=dify_config.CELERY_BACKEND, | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |         task_ignore_result=True, | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2024-08-15 12:54:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-17 15:40:21 +08:00
										 |  |  |     # Add SSL options to the Celery configuration | 
					
						
							|  |  |  |     ssl_options = { | 
					
						
							|  |  |  |         "ssl_cert_reqs": None, | 
					
						
							|  |  |  |         "ssl_ca_certs": None, | 
					
						
							|  |  |  |         "ssl_certfile": None, | 
					
						
							|  |  |  |         "ssl_keyfile": None, | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |     celery_app.conf.update( | 
					
						
							| 
									
										
										
										
											2024-10-22 11:01:32 +08:00
										 |  |  |         result_backend=dify_config.CELERY_RESULT_BACKEND, | 
					
						
							| 
									
										
										
										
											2024-09-08 13:23:51 +08:00
										 |  |  |         broker_transport_options=broker_transport_options, | 
					
						
							| 
									
										
										
										
											2024-04-09 16:14:43 +08:00
										 |  |  |         broker_connection_retry_on_startup=True, | 
					
						
							| 
									
										
										
										
											2024-11-08 17:12:09 +08:00
										 |  |  |         worker_log_format=dify_config.LOG_FORMAT, | 
					
						
							|  |  |  |         worker_task_log_format=dify_config.LOG_FORMAT, | 
					
						
							|  |  |  |         worker_hijack_root_logger=False, | 
					
						
							| 
									
										
										
										
											2024-12-24 18:38:51 +08:00
										 |  |  |         timezone=pytz.timezone(dify_config.LOG_TZ or "UTC"), | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |     ) | 
					
						
							| 
									
										
										
										
											2023-05-17 15:40:21 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-22 11:01:32 +08:00
										 |  |  |     if dify_config.BROKER_USE_SSL: | 
					
						
							| 
									
										
										
										
											2023-05-17 15:40:21 +08:00
										 |  |  |         celery_app.conf.update( | 
					
						
							|  |  |  |             broker_use_ssl=ssl_options,  # Add the SSL options to the broker configuration | 
					
						
							|  |  |  |         ) | 
					
						
							| 
									
										
										
										
											2024-08-15 12:54:05 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-12 00:53:12 +09:00
										 |  |  |     if dify_config.LOG_FILE: | 
					
						
							|  |  |  |         celery_app.conf.update( | 
					
						
							|  |  |  |             worker_logfile=dify_config.LOG_FILE, | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |     celery_app.set_default() | 
					
						
							|  |  |  |     app.extensions["celery"] = celery_app | 
					
						
							| 
									
										
										
										
											2024-01-02 15:29:18 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     imports = [ | 
					
						
							|  |  |  |         "schedule.clean_embedding_cache_task", | 
					
						
							|  |  |  |         "schedule.clean_unused_datasets_task", | 
					
						
							| 
									
										
										
										
											2024-10-25 13:57:03 +08:00
										 |  |  |         "schedule.create_tidb_serverless_task", | 
					
						
							|  |  |  |         "schedule.update_tidb_serverless_status_task", | 
					
						
							| 
									
										
										
										
											2024-11-18 16:57:39 +08:00
										 |  |  |         "schedule.clean_messages", | 
					
						
							| 
									
										
										
										
											2024-12-26 18:14:08 +08:00
										 |  |  |         "schedule.mail_clean_document_notify_task", | 
					
						
							| 
									
										
										
										
											2024-01-02 15:29:18 +08:00
										 |  |  |     ] | 
					
						
							| 
									
										
										
										
											2024-10-22 11:01:32 +08:00
										 |  |  |     day = dify_config.CELERY_BEAT_SCHEDULER_TIME | 
					
						
							| 
									
										
										
										
											2024-01-02 15:29:18 +08:00
										 |  |  |     beat_schedule = { | 
					
						
							| 
									
										
										
										
											2024-08-15 12:54:05 +08:00
										 |  |  |         "clean_embedding_cache_task": { | 
					
						
							|  |  |  |             "task": "schedule.clean_embedding_cache_task.clean_embedding_cache_task", | 
					
						
							|  |  |  |             "schedule": timedelta(days=day), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "clean_unused_datasets_task": { | 
					
						
							|  |  |  |             "task": "schedule.clean_unused_datasets_task.clean_unused_datasets_task", | 
					
						
							|  |  |  |             "schedule": timedelta(days=day), | 
					
						
							| 
									
										
										
										
											2024-01-02 15:29:18 +08:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-10-25 13:57:03 +08:00
										 |  |  |         "create_tidb_serverless_task": { | 
					
						
							|  |  |  |             "task": "schedule.create_tidb_serverless_task.create_tidb_serverless_task", | 
					
						
							|  |  |  |             "schedule": crontab(minute="0", hour="*"), | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         "update_tidb_serverless_status_task": { | 
					
						
							|  |  |  |             "task": "schedule.update_tidb_serverless_status_task.update_tidb_serverless_status_task", | 
					
						
							| 
									
										
										
										
											2024-11-27 17:41:00 +08:00
										 |  |  |             "schedule": timedelta(minutes=10), | 
					
						
							| 
									
										
										
										
											2024-10-25 13:57:03 +08:00
										 |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-11-18 16:57:39 +08:00
										 |  |  |         "clean_messages": { | 
					
						
							|  |  |  |             "task": "schedule.clean_messages.clean_messages", | 
					
						
							|  |  |  |             "schedule": timedelta(days=day), | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-12-26 18:14:08 +08:00
										 |  |  |         # every Monday | 
					
						
							|  |  |  |         "mail_clean_document_notify_task": { | 
					
						
							|  |  |  |             "task": "schedule.mail_clean_document_notify_task.mail_clean_document_notify_task", | 
					
						
							|  |  |  |             "schedule": crontab(minute="0", hour="10", day_of_week="1"), | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-01-02 15:29:18 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-08-15 12:54:05 +08:00
										 |  |  |     celery_app.conf.update(beat_schedule=beat_schedule, imports=imports) | 
					
						
							| 
									
										
										
										
											2024-01-02 15:29:18 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-15 08:51:32 +08:00
										 |  |  |     return celery_app |