From 2704c8f7c624ffaad7a3e35dc41ac6cc9b7307a6 Mon Sep 17 00:00:00 2001 From: bidaya0 Date: Wed, 29 Jun 2022 16:41:42 +0800 Subject: [PATCH 1/2] add-celery-handler --- dongtai_conf/settings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dongtai_conf/settings.py b/dongtai_conf/settings.py index 717afcc4f..a1b2bbf54 100644 --- a/dongtai_conf/settings.py +++ b/dongtai_conf/settings.py @@ -609,6 +609,8 @@ def safe_execute(default, exception, function, *args): ASSET_INDEX = config.get('elastic_search', 'asset_index') ELASTICSEARCH_DSL_PARALLEL = True ELASTICSEARCH_DSL_AUTO_REFRESH = False + ELASTICSEARCH_DSL_AUTO_REFRESH = False + ELASTICSEARCH_DSL_SIGNAL_PROCESSOR = 'dongtai_common.utils.es.DTCelerySignalProcessor' from elasticsearch import logger as es_logger import elasticsearch es_logger.setLevel(elasticsearch.logging.INFO) From 7336453af7dff8fbd2a8f8e8dabc003b512c1105 Mon Sep 17 00:00:00 2001 From: bidaya0 Date: Wed, 29 Jun 2022 16:44:20 +0800 Subject: [PATCH 2/2] add-celery-handler --- dongtai_common/utils/es.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 dongtai_common/utils/es.py diff --git a/dongtai_common/utils/es.py b/dongtai_common/utils/es.py new file mode 100644 index 000000000..06de68ceb --- /dev/null +++ b/dongtai_common/utils/es.py @@ -0,0 +1,26 @@ +from celery import shared_task +from django.apps import apps +from django.db import transaction +from django_elasticsearch_dsl.registries import registry +from django_elasticsearch_dsl.signals import RealTimeSignalProcessor +import logging + + +logger = logging.getLogger('dongtai-core') + +@shared_task +def handle_save(pk, app_label, model_name): + logger.info(f'handle_save to es: {model_name} pk: {pk}') + sender = apps.get_model(app_label, model_name) + instance = sender.objects.get(pk=pk) + registry.update(instance) + registry.update_related(instance) + + +class DTCelerySignalProcessor(RealTimeSignalProcessor): + + def handle_save(self, sender, instance, **kwargs): + app_label = instance._meta.app_label + model_name = instance._meta.model_name + transaction.on_commit( + lambda: handle_save.delay(instance.pk, app_label, model_name))