From 5be39c6b8b1291183258371a89cd728bb0a03864 Mon Sep 17 00:00:00 2001 From: lian Date: Fri, 2 Jul 2021 14:54:47 +0800 Subject: [PATCH 1/3] set OnlyOffice cache timeout to None after user force save file --- seahub/onlyoffice/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seahub/onlyoffice/views.py b/seahub/onlyoffice/views.py index 686f364497..5887c78e58 100644 --- a/seahub/onlyoffice/views.py +++ b/seahub/onlyoffice/views.py @@ -139,7 +139,7 @@ def onlyoffice_editor_callback(request): # 6 - document is being edited, but the current document state is saved, if status == 6: # cache document key when forcesave - cache.set(cache_key, doc_key) + cache.set(cache_key, doc_key, None) # 4 - document is closed with no changes, if status == 4: From 8f4324ab896a1fe5ef4887b84cee1068ec1f2913 Mon Sep 17 00:00:00 2001 From: lian Date: Fri, 2 Jul 2021 16:25:05 +0800 Subject: [PATCH 2/3] update get onlyoffice dict use origin repo id and file path to adapt folder share situation --- seahub/onlyoffice/utils.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/seahub/onlyoffice/utils.py b/seahub/onlyoffice/utils.py index 08b8a9c735..56627e5c80 100644 --- a/seahub/onlyoffice/utils.py +++ b/seahub/onlyoffice/utils.py @@ -65,7 +65,7 @@ def get_onlyoffice_dict(request, username, repo_id, file_path, file_id='', else: document_type = 'text' - cache_key = generate_onlyoffice_cache_key(repo_id, file_path) + cache_key = generate_onlyoffice_cache_key(origin_repo_id, origin_file_path) doc_key = cache.get(cache_key) # temporary solution when failed to get data from cache(django_pylibmc) @@ -80,8 +80,8 @@ def get_onlyoffice_dict(request, username, repo_id, file_path, file_id='', info_bytes = force_bytes(origin_repo_id + origin_file_path + file_id) doc_key = hashlib.md5(info_bytes).hexdigest()[:20] - doc_info = json.dumps({'repo_id': repo_id, - 'file_path': file_path, + doc_info = json.dumps({'repo_id': origin_repo_id, + 'file_path': origin_file_path, 'username': username}) cache.set("ONLYOFFICE_%s" % doc_key, doc_info, None) From 7ec661934986b6b1e7e0ec4af83093328ff6f3fe Mon Sep 17 00:00:00 2001 From: lian Date: Fri, 2 Jul 2021 16:53:40 +0800 Subject: [PATCH 3/3] add onlyoffice.log --- seahub/onlyoffice/utils.py | 8 +++++++- seahub/onlyoffice/views.py | 7 ++++++- seahub/settings.py | 13 +++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/seahub/onlyoffice/utils.py b/seahub/onlyoffice/utils.py index 56627e5c80..c7ed9571e1 100644 --- a/seahub/onlyoffice/utils.py +++ b/seahub/onlyoffice/utils.py @@ -21,7 +21,7 @@ from seahub.onlyoffice.settings import ONLYOFFICE_APIJS_URL, \ ONLYOFFICE_FORCE_SAVE, ONLYOFFICE_JWT_SECRET # Get an instance of a logger -logger = logging.getLogger(__name__) +logger = logging.getLogger('onlyoffice') def generate_onlyoffice_cache_key(repo_id, file_path): @@ -33,6 +33,8 @@ def generate_onlyoffice_cache_key(repo_id, file_path): def get_onlyoffice_dict(request, username, repo_id, file_path, file_id='', can_edit=False, can_download=True): + logger.info('{} open file {} in repo {}'.format(username, file_path, repo_id)) + repo = seafile_api.get_repo(repo_id) if repo.is_virtual: origin_repo_id = repo.origin_repo_id @@ -68,6 +70,8 @@ def get_onlyoffice_dict(request, username, repo_id, file_path, file_id='', cache_key = generate_onlyoffice_cache_key(origin_repo_id, origin_file_path) doc_key = cache.get(cache_key) + logger.info('get doc_key {} from cache by cache_key {}'.format(doc_key, cache_key)) + # temporary solution when failed to get data from cache(django_pylibmc) # when init process for the first time if not doc_key: @@ -79,11 +83,13 @@ def get_onlyoffice_dict(request, username, repo_id, file_path, file_id='', if not doc_key: info_bytes = force_bytes(origin_repo_id + origin_file_path + file_id) doc_key = hashlib.md5(info_bytes).hexdigest()[:20] + logger.info('generate new doc_key {} by info {}'.format(doc_key, info_bytes)) doc_info = json.dumps({'repo_id': origin_repo_id, 'file_path': origin_file_path, 'username': username}) cache.set("ONLYOFFICE_%s" % doc_key, doc_info, None) + logger.info('set doc_key {} and doc_info {} to cache'.format(doc_key, doc_info)) file_name = os.path.basename(file_path.rstrip('/')) doc_url = gen_file_get_url(dl_token, file_name) diff --git a/seahub/onlyoffice/views.py b/seahub/onlyoffice/views.py index 5887c78e58..53e78616e6 100644 --- a/seahub/onlyoffice/views.py +++ b/seahub/onlyoffice/views.py @@ -16,7 +16,7 @@ from seahub.utils.file_op import if_locked_by_online_office # Get an instance of a logger -logger = logging.getLogger(__name__) +logger = logging.getLogger('onlyoffice') @csrf_exempt @@ -94,6 +94,8 @@ def onlyoffice_editor_callback(request): file_path = doc_info['file_path'] username = doc_info['username'] + logger.info('status {}: get doc_info {} from cache by doc_key {}'.format(status, doc_info, doc_key)) + cache_key = generate_onlyoffice_cache_key(repo_id, file_path) # save file @@ -131,6 +133,7 @@ def onlyoffice_editor_callback(request): # 2 - document is ready for saving, if status == 2: + logger.info('status {}: delete cache_key {} from cache'.format(status, cache_key)) cache.delete(cache_key) if is_pro_version() and if_locked_by_online_office(repo_id, file_path): @@ -139,11 +142,13 @@ def onlyoffice_editor_callback(request): # 6 - document is being edited, but the current document state is saved, if status == 6: # cache document key when forcesave + logger.info('status {}: set cache_key {} and doc_key {} to cache'.format(status, cache_key, doc_key)) cache.set(cache_key, doc_key, None) # 4 - document is closed with no changes, if status == 4: + logger.info('status {}: delete cache_key {} from cache'.format(status, cache_key)) cache.delete(cache_key) if is_pro_version() and if_locked_by_online_office(repo_id, file_path): diff --git a/seahub/settings.py b/seahub/settings.py index aa8440e031..9a8c318d41 100644 --- a/seahub/settings.py +++ b/seahub/settings.py @@ -600,6 +600,14 @@ LOGGING = { 'backupCount': 5, 'formatter': 'standard', }, + 'onlyoffice_handler': { + 'level': 'INFO', + 'class': 'logging.handlers.RotatingFileHandler', + 'filename': os.path.join(LOG_DIR, 'onlyoffice.log'), + 'maxBytes': 1024*1024*100, # 100 MB + 'backupCount': 5, + 'formatter': 'standard', + }, 'mail_admins': { 'level': 'ERROR', 'filters': ['require_debug_false'], @@ -622,6 +630,11 @@ LOGGING = { 'level': 'INFO', 'propagate': False }, + 'onlyoffice': { + 'handlers': ['onlyoffice_handler', ], + 'level': 'INFO', + 'propagate': False + }, } }